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您的应用程序,当您对结果感到满意时,您可以移至自己的生产环境。