【问题标题】:How to make asset precompilation work properly with `Rails.env == staging` on Heroku?如何使用 Heroku 上的“Rails.env == staging”使资产预编译正常工作?
【发布时间】:2014-02-05 23:15:06
【问题描述】:

我有一个 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" />

这是同一个文件,但最后的哈希值不同。

我做错了什么?

【问题讨论】:

    标签: heroku asset-pipeline


    【解决方案1】:

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

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

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

    (您可能还需要确保您的 pg gem 也在两者中)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-26
      • 2013-03-10
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 2014-07-12
      • 1970-01-01
      相关资源
      最近更新 更多