Rails 3.1和图像资产

我已将我的pipe理主题的所有图像放在名为admin的文件夹中的assets文件夹中。 然后我链接到它像正常即。

# Ruby image_tag "admin/file.jpg" ..... #CSS .logo{ background:url('/assetshttp://img.dovov.comadmin/logo.png'); 

仅供参考。 只是为了testing,我没有使用asset_path标记,因为我还没有编译我的资产。

好吧,直到我决定更新一个图像。 我更换了一些颜色,但重新加载新样式的图像不显示。 如果我直接在浏览器中查看图像,仍然会显示旧图像。 更进一步,我摧毁了pipe理图像文件夹。 但是它没有打破所有的图像仍然被显示。 是的,我清除了我的caching,并尝试在多个浏览器。

是否有某种forms的图像caching? 这只是使用pow来为页面服务的本地开发。

即使摧毁整个图像文件夹的图像仍然被送达。

我错过了什么吗?

在3.1中,你只是摆脱了“图像”部分的path。 因此,位于/assetshttp://img.dovov.comexample.png的图像实际上可以通过此url的获取请求访问 – /assets/example.png

由于assets/images文件夹与新的3.1应用程序一起生成,这是他们可能希望你遵循的惯例。 我认为这是image_tag会寻找它,但我还没有testing。

另外,在RailsConf主题演讲中,我记得D2h说public folder不应该有太多内容,主要是错误页面和favicon。

你需要将你的css文件的扩展名从.css.scss改为.css.scss.erb然后执行:

 background-image:url(<%=asset_path "admin/logo.png"%>); 

您可能需要进行“硬刷新”以查看更改。 CMX + SHIFT + R在OSX浏览器上。

在生产中,确保

 rm -rf public/assets bundle exec rake assets:precompile RAILS_ENV=production 

部署时发生。

为什么这是值得的,当我这样做时,我发现没有文件夹应包括在css文件的path。 例如,如果我有app/assetshttp://img.dovov.comexample.png ,我把这个在我的CSS文件…

 div.example { background: url('example.png'); } 

…然后不知何故它奇迹般地工作。 我通过运行rake assets:precompile这个问题rake assets:precompile任务,它将所有负载path中的所有内容都删除,并将其转储到垃圾抽屉文件夹中: public/assets 。 这很讽刺,IMO …

在任何情况下,这意味着您不需要放置任何文件夹path,资产文件夹中的所有内容都将最终生成一个巨大的目录。 这个系统如何解决文件名冲突尚不清楚,你可能需要小心。

那种令人沮丧的情况是没有更好的文件,因为这个变化很大。

在rails 4中,您现在可以使用css和sass帮助程序image-url:

 div.logo {background-image: image-url("logo.png");} 

如果您的背景图片没有显示出来,请考虑在样式表中如何引用它们。

当在CSS或IMG标签中引用图像时,请使用image-name.jpg

而图像真的位于./assetshttp://img.dovov.comimage-name.jpg下面

http://railscasts.com/episodes/279-understanding-the-asset-pipeline

这个railscast(资产pipe道上的Rails教程video)也有助于解释资产pipe道中的path。 我发现它非常有用,实际上看了几次。

我select的解决scheme是@Lee McAlilly的,但是这个railscast帮助我理解了为什么它能够工作。 希望能帮助到你!

轨道中的资产pipe道提供了一个确切的事情的方法。

您只需将image_path('图像文件名')添加到您的css或scss文件中,rails就会处理所有事情。 例如:

.logo{ background:url(image_path('admin/logo.png'));

(请注意,它就像在.erb视图中一样工作,并且不在path中使用“/ assets”或“/ assets / images”)

Rails也提供了其他的帮助方法,这里还有另一个答案: 在使用Rails 3.1时,如何在Sass中使用参考图像?

你可以考虑使用Gem PaperClip https://github.com/thoughtbot/paperclip

我确实需要ImageMagick( http://www.imagemagick.org/script/index.php )。

这个解决scheme应该可以解决你的图像问题。

Heroku.com帐户预装了ImageMagick,因此如果您想使用Herokutesting生产版本,您只需将其安装在本地计算机上用于开发环境。

您可以在Heroku上testing您的应用程序,当您对结果感到满意时,您可以移至自己的生产环境。