Rails 3.1和映像资产

我已经把我所有的管理主题的图片放在资产文件夹中的一个文件夹称为管理。然后我像平常一样链接它。

# Ruby
image_tag "admin/file.jpg" .....
#CSS
.logo{ background:url('/assets/images/admin/logo.png');

仅仅是为了测试,我还没有使用 asset _ path 标签,因为我还没有编译我的资产。

到目前为止一切正常,直到我决定更新一个图像。我更换了一些颜色,但在重新加载新样式的图像不显示。如果我直接在浏览器中查看图像,它仍然显示旧图像。更进一步,我销毁了管理图像文件夹。但它没有打破任何东西,所有的图像仍然显示。是的,我已经清空了我的缓存,并且尝试了多个浏览器。

有什么图像缓存吗?这只是本地开发使用 pow 服务页面。

甚至破坏整个图像文件夹的图像仍然被送达。

我错过了什么吗?

135533 次浏览

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

而图像实际上位于./asset/images/image-name. jpg 下

在3.1中,你只需去掉路径中的“图像”部分。因此,一个存在于 /assets/images/example.png中的图像实际上可以在这个 url-/assets/example.png的 get 请求中访问

因为 assets/images文件夹是与一个新的3.1应用程序一起生成的,所以他们可能希望您遵循这个约定。我认为这是 image_tag将寻找它,但我还没有测试。

另外,在 RailsConf 的主题演讲中,我记得 D2h 说 public folder不应该再有太多内容,大多数只是错误页面和图标。

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

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

您可能需要进行“硬刷新”来查看更改。

在制作过程中,要确保

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

在部署时发生。

不管怎样,当我这样做的时候,我发现在 css 文件的路径中不应该包含任何文件夹。例如,如果我有 app/assets/images/example.png,我把它放在我的 css 文件..。

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

然后它就神奇地起作用了。我通过运行 rake assets:precompile任务解决了这个问题,它只是从所有的加载路径中吸取所有的内容,然后将其转储到一个垃圾抽屉文件夹: public/assets。讽刺的是,我..。

无论如何,这意味着您不需要放置任何文件夹路径,您的资产文件夹中的所有内容最终都将位于一个巨大的目录中。这个系统如何解决文件名冲突还不清楚,你可能需要小心。

Kind of frustrating there aren't better docs out there for this big of a change.

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

这个 Railscast (Rails 教程关于资产管道的视频)也有助于解释资产管道中的路径。我觉得它很有用,实际上我看了几遍。

我选择的解决方案是上面提到的“李 · 麦卡利”,但是这个节目帮助我理解了它为什么有效。希望能有帮助!

在 Rails 4中,你现在可以使用 css 和 sass helper image-url:

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

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

Rails 中的资产管道为此提供了一种方法。

你只需要将 image _ path (‘ image filename’)添加到 css 或 scss 文件中,Rails 就可以处理所有事情。例如:

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

(请注意,它的工作方式与. erb 视图类似,在路径中不使用“/asset”或“/asset/images”)

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