1

我的应用程序中有一些额外的清单文件,定义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_tagfor生成的示例www.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 后就不行了。那么我必须做些什么不同的事情才能让它发挥作用呢?

4

1 回答 1

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.14production无论如何都加载)。所以config.assets.precompile设置staging也需要加入。

于 2013-08-24T19:38:47.063 回答