我有一个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" />
哪个是相同的文件,但最后是不同的哈希。
我做错了什么?
答案 0 :(得分:4)
确保将BOTH RAILS_ENV和RACK_ENV设置为分段(可能导致难以调试的问题)。
还要确保您的暂存环境和生产中都有rails_12factor
gem:
gem "rails_12factor", group: [:production, :staging]
(您可能还需要确保您的pg gem同样存在)