如何在Heroku上使用`Rails.env == staging`使资源预编译正常工作?

时间:2014-02-05 14:58:00

标签: heroku asset-pipeline

我有一个Heroku实例设置为我的应用程序的临时服务器。直到最近它工作正常,但我意识到它也将Rails.env设置为等于:production。我希望它是:staging

因此我运行了命令

heroku config:set RACK_ENV=staging RAILS_ENV=staging --remote staging

并为登台环境添加了config/environments/staging.rb。该配置文件镜像了生产环境的配置文件。但是,我现在发现资产管道的行为很奇怪。

如果我执行命令:

git push staging master

然后资产编译似乎根本没有发生(在我的实际生产环境中,它发生在Heroku完成了slug编译之后)。

在Heroku上手动运行预编译

heroku run rake assets:precompile -a ptw-staging

确实会使资产编译,但生成的URL会返回404错误。不仅如此,编译返回的资产与应用程序中的资产不匹配

例如,运行编译命令会返回:

plantheworld-code petenixey$ heroku run rake assets:precompile -a ptw-staging
Running `rake assets:precompile` attached to terminal... up, run.1158
#...
I, [2014-02-05T13:52:28.963871 #2]  INFO -- : Writing /app/public/assets/application-643f7d598dfee123184a638ee696cf15.css

作为HTML文件中的一个文件,包含的application.css文件是:

<link href="/assets/application-b79916a954fcdab047e735446f1f76a1.css" media="all" rel="stylesheet" />

哪个是相同的文件,但最后是不同的哈希。

我做错了什么?

1 个答案:

答案 0 :(得分:4)

确保将BOTH RAILS_ENV和RACK_ENV设置为分段(可能导致难以调试的问题)。

还要确保您的暂存环境和生产中都有rails_12factor gem:

gem "rails_12factor", group: [:production, :staging]

(您可能还需要确保您的pg gem同样存在)