Rails 4没有将指纹添加到Heroku上包含的“额外”资产管道清单文件中

时间:2013-08-24 19:13:40

标签: ruby-on-rails heroku asset-pipeline ruby-on-rails-4 sprockets

我在config/environments/production.rb中定义的应用中有一些额外的清单文件,如下所示:

config.assets.precompile += %w( www.js sessions.js embed.js www.css sessions.css embed.css )

这些在开发模式下本地工作正常,但在我的自定义Heroku登台环境中,style_sheet_link_tagjavascript_include_tag帮助程序不会向组合文件添加指纹,导致这些资产返回404错误。

以下是style_sheet_link_tagwww.css生成的内容示例:

<%# Look ma, no fingerprint! %>
<link href="//s3.amazonaws.com/my-bucket-name/stylesheets/www.css" media="all" rel="stylesheet" />

以下是app/assets/stylesheets/www/index.css的文件:

/*
 *= require_self
 *= require www/foundation_and_overrides
 *= require mediaelement_rails
 *= require mediaelement_rails/mejs-skins
 *= require www/base
 *= require www/icons
 *= require www/header
 *= require www/footer
 *= require www/home
 *= require www/help
 */

这在Rails 3.2.14中正常运行,但在升级到Rails 4.0.0之后没有。那么我必须做些什么才能使其发挥作用呢?

1 个答案:

答案 0 :(得分:0)

解决方案是将config.assets.precompile设置复制到config/environments/staging.rb或将其移至config/application.rb

# Now in `config/application/rb` so it's loaded in both `production` AND `staging` environments
config.assets.precompile += %w( www.js sessions.js embed.js www.css sessions.css embed.css )

看来这个问题浮出水面是因为我在Heroku上的暂存应用程序加载了staging环境的设置:

# By running `heroku config`
RACK_ENV:  staging
RAILS_ENV: staging

显然,Heroku上的Rails 4为rake assets:precompile环境运行staging(而Rails 3.2.14从production加载,无论如何)。因此,config.assets.precompile设置也需要在staging中获取。