我的标签:
= link_to '', root_path, class: 'items__footage'
我的选择器:
.items__footage {
display: inline-block;
content: '';
width: 300px;
min-height: 300px;
background: url('/assets/footage_still.png') no-repeat;
background-size: auto 100%;
}
我的图片路径为assets/images/footage_still.png
。如果我指明此路径,则我的图像无法在本地运行。
我做过rake assets:precompile
。但它没有帮助。
答案 0 :(得分:1)
在生产环境中,Sprockets使用指纹识别方案 概述如上。默认情况下,Rails假定资产已经过预编译 并将由您的网络服务器作为静态资产提供。
在预编译阶段,从中生成SHA256 已编译文件的内容,并插入到文件名中 它们被写入磁盘。这些指纹名称由。使用 Rails助手代替清单名称。
因此,在生产环境中,您的所有资产都将进行预编译,并将从public/assets
投放。该文件也将使用指纹重命名。所以实际上在生产中你的文件名看起来像
footage_still-908e25f4bf641868d8683022a5b62f54.png
每次文件内容更改时指纹都会更改,并且对于缓存静态资源很有用,通常称为cache busting
。
因此,当您对图片网址/assets/footage_still.png
进行硬编码时,它会在生产中中断。为了处理这种情况,rails提供了一个名为asset url helpers的东西。
要使其正常运行,您必须将.css
文件重命名为.scss
,否则请更改。
background: url('/assets/footage_still.png') no-repeat;
到
background: image_url('footage_still.png') no-repeat;
希望这有帮助。
答案 1 :(得分:1)
如果您可以在css文件中使用ruby代码,那么请使用items_footage的背景。
background: url("<%= asset_path('footage_still.png') %>");
要在css文件中使用ruby代码,请将该文件设为filename.css.erb
答案 2 :(得分:0)
您可以使用image_url('footage_still.png')
并让rails找到图片的路径