Rails 4.2:只有在设置 config.assets.compile = true 时才会添加图像路径和指纹。

5

在生产环境中,我的图片的正确路径不是用图像标签调用的,也没有添加md5指纹。图片名称(例如“pretty_picture.jpg”)存储在数据库中。预编译文件都位于公共文件夹中,包括清单文件。

如果使用image_tag调用:

image_tag @test_question.question.image

I get:

<img src="/images/pretty_picture.jpg">

如果我在 production.rb 中设置 config.assets.compile = true,那么图像就会呈现出来,我会得到:
<img src="/assets/images/pics/pretty/pretty_picture-e0df5012b6930cda4efaa866af22a63f.jpg" >

我的解决方案是使用(在HAML中):
%img{src: "/assets/"+Rails.application.assets.find_asset(@test_question.question.image).digest_path}

在 production.rb 文件中,我有以下内容:
config.assets.digest = true
config.assets.enabled = true
config.serve_static_files = false
config.assets.compile = false 

在生产环境中将config.assets.compile设置为true并不建议。这似乎是sprockets和资产管道的非常奇怪的行为。对于这里使用image_tag有什么问题,您有什么想法吗?


我也遇到了同样的问题 - 感谢你找到了那个 hack 解决方案 - 至少它给了我一些可用的代码。 - Elocution Safari
这个问题有没有非黑客解决方案?我也遇到了同样的问题。 - user2012677
1个回答

1
在生产环境中,您应该在启动服务器之前预编译资产,使用以下命令(并自动化执行每次部署时都要进行此操作):
rake assets:precompile RAILS_ENV="production"

在你的production.rb中保持config.assets.compile = false。请查看资产管道指南

是的,资产已经为正确的环境预编译,并使用Capistrano部署到服务器上。如问题描述中所述,资产以应有的方式存在于公共文件夹中,并且config.assets.compile = false。但是在视图中未正确引用图像。 - user3291025

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接