开发者

Heroku RACK_ENV says "development" on Thin, but "staging" on Unicorn

I came across this behavior and was wondering if anyone else had seen it. I have a workaround so it's not a show-stopper.

I created a new app on Heroku with a Cedar stack. When demonstrating multiple environments I added the following config var:

heroku config:add RACK_ENV=staging --app appname

I visually verified that the environment var was set, then put the following route in my simple Sinatra example:

get '/?' do
  ENV['RACK_ENV']
end

When I tested locally on my laptop, I received the expected development.

When I pushed to He开发者_运维百科roku and hit the same route on herokuapp.com I got development instead of staging.

I switched the web server from Thin to Unicorn through the Procfile and pushed the changes back up to Heroku.

Now when I hit the route, I get the expected staging.

Has anyone else seen this? My workaround on another project where I was running Thin was to key the environment off of the New Relic app name. (I didn't switch to Unicorn because I need New Relic to work and currently Cedar and New Relic and Unicorn work together).


I had the same problem with sinatra and thin on the cedar stack using heroku's example sinatra app. The RACK_ENV refuses to be set to anything but development. (Heroku seems to think that it's RACK_ENV is set, since running 'heroku config' displays the environment you set, however in the app it's always development).

The same app on the bamboo stack had no problems.

EDIT: I submitted a ticket to heroku about this and got a really quick response which fixed the bug for me:

QUOTE: It looks like there's a small bug in our default Procfile if you're using thin. Can you create a Procfile with the following in it?

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


You can also set both your RACK_ENV and RAILS_ENV to staging using the Heroku gem ... then it works as expected. I think it may be a problem with Heroku.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜