Heroku RACK_ENV 在 Thin 上显示为“development”,但在 Unicorn 上显示为“staging”。

5
我发现了这个问题,想知道是否有其他人也见过。我已经有了解决方法,所以不会成为阻碍。
我在Heroku上创建了一个新的应用程序,并使用Cedar堆栈。在演示多个环境时,我添加了以下配置变量:
heroku config:add RACK_ENV=staging --app appname 我通过目视验证了环境变量已经设置,然后在我的简单Sinatra示例中添加了以下路由:
get '/?' do
  ENV['RACK_ENV']
end

当我在本地测试时,我收到了预期的development
当我将代码推送到Heroku并在herokuapp.com上访问相同的路由时,我得到的是development而不是staging
我通过Procfile将Web服务器从Thin切换到Unicorn,并将更改推回Heroku。
现在当我访问该路由时,我得到了预期的staging
有其他人也遇到过这种情况吗?我的另一个项目中的解决方法是基于New Relic应用程序名称来设置环境变量。(我没有切换到Unicorn,因为我需要New Relic工作,目前Cedar、New Relic和Unicorn可以一起使用)。
2个回答

14

我在Cedar堆栈上使用Heroku的Sinatra应用程序时,也遇到了与Thin相同的问题。RACK_ENV拒绝被设置为除development之外的任何内容。(Heroku似乎认为它的RACK_ENV已经设置好了,因为运行'heroku config'会显示你设置的环境变量,但在应用程序中它总是development)。

在Bamboo堆栈上运行同样的应用则没有问题。

编辑:我向Heroku提交了一张关于这个问题的工单,并得到了快速响应,他们为我修复了这个错误:

引用:

看起来我们默认的Procfile存在一个小Bug,如果你正在使用thin,那么你可以创建一个包含以下内容的Procfile:

web: bundle exec thin start -R config.ru -e $RACK_ENV -p $PORT


人 - 真的很高兴我找到了这个。这解决了我的新贵集成问题。 - Jonathan
谢谢!但是令人难以置信的是,这个问题到现在还没有被解决。 - Felixyz

4

您也可以使用Heroku gem将RACK_ENV和RAILS_ENV都设置为staging...然后它会按预期工作。我认为这可能是Heroku的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接