为啥在rails中链接css中的图像时使用ASSET_PATH而不是Image-url

Posted

技术标签:

【中文标题】为啥在rails中链接css中的图像时使用ASSET_PATH而不是Image-url【英文标题】:Why use ASSET_PATH over Image-url when linking images in css in rails为什么在rails中链接css中的图像时使用ASSET_PATH而不是Image-url 【发布时间】:2013-09-09 14:42:38 【问题描述】:

首先让我说这是 Rails 最糟糕的部分。来自 .NET 背景,像编写任何标准 html 页面一样编写 css 非常容易,但是,不,不是在 Rails 中,除非你做所有这些特别的废话,否则它会爆炸。

我的问题本质上是这样的:当我将 .erb 添加到 application.css 的末尾并像这样编写 background-image 属性时,为什么我只能通过资产管道加载我的图像:

background-image: url(<%= asset_path 'image.png' %>);

我不明白为什么这些不起作用(我尝试了 100 种不同的方法):

background-image: url('/assets/image.png');
background-image: url('assets/image.png');
background-image: image-url('image.png');
background-image: image-url('assets/image.png');
background-image: url(image.png);

仅供参考,这是我的生产环境,所有内容都是预编译的。通过这种方式链接,一切都在开发中:

 background-image url('/assets/image.png');

但是当我切换到生产和预编译时,任何图像或字体文件都必须转换为 ASSET_PATH 处理方法,否则图像不会显示...常见问题?

【问题讨论】:

我相信指纹识别与它有关。您是否查看了生成的 CSS 文件以及 URL 变成了什么? Rails 资产管道做得很好,请查看它以获得更好的解释 -> guides.rubyonrails.org/asset_pipeline.html 您最终找到了这个问题的答案吗?我有同样的问题***.com/questions/22998738 不,我只是将css中使用的图像扔到“Public/images”文件夹中,然后您可以按照正常方式进行CSS,如“url(images/image .png)",因为图像不是通过管道发送的。 【参考方案1】:

您的config/environments/production.rb 文件中可能有这样的内容:

config.serve_static_assets = false

这就是为什么它不会直接为他们服务。

顺便说一句:我已经完成了 .NET 和 Rails。很多这只是 Rails 和其他系统之间的差异。不过,我确实理解你的沮丧。

【讨论】:

我的挫败感仍在继续,因为我相信 config.serve_static_assets 设置为 true。在我在这里问之前,我已经对这个问题进行了数小时的研究,所以所有明显的解决方案都没有奏效。它可能与我的 apache 或 vhost conf 文件有关……我会对此进行更多研究。这一切真的很令人沮丧,但希望一旦我弄清楚了,我就再也不用处理这个了,哈哈

以上是关于为啥在rails中链接css中的图像时使用ASSET_PATH而不是Image-url的主要内容,如果未能解决你的问题,请参考以下文章

为啥要在图像和 css 文件之后查询字符串?

如何在 Rails 中从 JQuery 更改 CSS(背景图像)?

为啥我的链接不适用于我的 ruby​​ on rails 网站?单击时链接保持在同一页面上

Rails 3.1 资产管道 - 为啥我的图像没有为生产进行预编译?

当 CSS 中的尺寸未知时如何增加图像的宽度?

如何在 Rails 中使用 haml 制作图像链接标签?