有什么理由不在 Heroku 上使用 RAILS_ENV=staging 吗?

Are there any reasons not to use RAILS_ENV=staging on Heroku?

https://devcenter.heroku.com/articles/deploying-to-a-custom-rails-environment 的 Heroku 文档说我不应该使用 staging.rb 文件来定义暂存环境。

It may be tempting to create another custom environment such as “staging” and create a config/environments/staging.rb and deploy to a Heroku app with RAILS_ENV=staging.

This is not a good practice. Instead we recommend always running in production mode and modifying any behavior by setting your config vars.

我认为这是糟糕的建议,并且与公认的 Rails 最佳实践相冲突。但是,我不是来讨论最佳实践的。我是来问的:

有什么理由不在 Heroku 上使用 RAILS_ENV=staging 吗?

如果我创建一个 staging.rb 文件并像这样设置 xxx_ENV 配置变量,是否会出现任何问题?

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

部署时您会收到来自 Heroku 的一些警告,但我可以确认我在 Heroku 上使用 RAILS_ENV=staging 运行 暂存应用程序。只要您设置正确的环境变量和 Gemfile 组,它就应该可以正常工作。

我的猜测是,他们建议不要使用自定义环境的原因是他们有一些操作工具假设您的 Rails 应用程序 运行s 在 production 环境中,但是到目前为止,我没有 运行 进入问题。

不,这样做不会破坏任何东西。

但是,我确实认为 Heroku 就在这里(请注意,我在 Heroku 工作)。 它介绍了暂存环境和生产环境之间可能存在的差异,而它们之间唯一发生变化的应该是配置变量。
Heroku 已经提供了一种设置配置变量的安全方法,使用 config:set 命令。
使用 2 个配置文件意味着您必须两次维护相同的配置,并且可能会出现问题,因为您在试运行中正确更新了配置,但在生产中却不正确。

附带说明一下,RACK_ENV 应该只有 3 个值:productiondevelopmentnone。参见 https://www.hezmatt.org/~mpalmer/blog/2013/10/13/rack_env-its-not-for-you.html