2014-04-26 50 views
1

在生产中,image_tag助手生成的html返回404错误。 资产管道启用rails4:image_tag生成404错误

在HAML文件

=image_tag "how_it_works_1.jpg" 

how_it_works_1.jpg文件位于应用程序/资产/图像/ how_it_works_1.jpg

当我在生产中部署具有一锭银子,我可以找到该资产在电流/公/资产/ how_it_works_1-5e40b2326fc14e879ae476a3fd6aef97.jpg

但是生成的html没有指向该资产,而是/images/how_it_works_1.jpg它返回一个404

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

它的工作下的发展ENV

<img src="/assets/how_it_works_1.jpg"/> 

编辑: 我使用apache2.4客运 聚集在这里是我的production.rb的摘录:

config.serve_static_assets = false 
config.assets.js_compressor = :uglifier 
config.assets.css_compressor = :sass 
config.assets.compile = true 
config.assets.paths << Rails.root.join('app', 'assets', 'fonts') 
config.assets.digest = true 
config.assets.version = '1.0' 

回答

1

你必须先运行它。我以前自己也有过这个问题。

rake assets:precompile RAILS_ENV=production 

然后重新加载服务器。

+1

这是解决方案。我很怀疑,因为deploy.rb脚本已经有一个预编译规则 –

0

看起来好像您的资产正在预编译成功。但是,Rails默认拒绝在生产中提供静态资产。 This Rails guide有更多信息。 (Ctrl-F代表config.serve_static_assets

要回答您的问题,您需要配置您的Web服务器(是Apache,nginx还是其他?)以便从部署的目录public/assets/中提供静态资产。

如果您编辑您的问题以包含您的网络服务器,我可以给您一个更具体说明的链接。干杯!

+0

我正在使用apache2.4 +乘客。我编辑了这个问题 –

+0

好的,我认为你需要在你的Apache配置文件中有一行像'Alias/assets/path/to/currents/public/assets /'。虽然回想起来我并不认为这会有所帮助,因为[Passenger似乎应该已经提供静态资产](http://www.modrails.com/documentation/Users%20guide%20Apache.html#_static_assets_serving)。也许你可以提供更多的线索,比如public/assets /目录的Unix文件权限? – tdooner

+0

公共/资产是664 –

0

似乎config.assets.digest在config/environments/production.rb中不是true(默认情况下它应该是true)。

+0

它被设置为true - 我编辑了我的问题,将production.rb的相关部分添加到 –