Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 Heroku 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).

like image 646
wjklos Avatar asked Aug 07 '11 20:08

wjklos


2 Answers

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

like image 195
Mitch Avatar answered Oct 15 '22 13:10

Mitch


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.

like image 39
Joerg Avatar answered Oct 15 '22 12:10

Joerg