Skip to content

Instantly share code, notes, and snippets.

@subelsky
Created October 31, 2012 13:51
Show Gist options
  • Star 30 You must be signed in to star a gist
  • Fork 8 You must be signed in to fork a gist
  • Save subelsky/3987140 to your computer and use it in GitHub Desktop.
Save subelsky/3987140 to your computer and use it in GitHub Desktop.
Setting up Puma and Rails on Heroku
# Gemfile
gem "puma"
# Procfile
web: bundle exec puma -p $PORT -e $RACK_ENV -C config/puma.rb
# add to config block config/environments/production.rb
config.threadsafe!
# get rid of NewRelic after_fork code, if you were doing this:
# http://support.newrelic.com/kb/troubleshooting/unicorn-no-data
# and get rid of config/unicorn.rb if you were using that
# config/puma.rb
require "active_record"
cwd = File.dirname(__FILE__)+"/.."
ActiveRecord::Base.connection.disconnect! rescue ActiveRecord::ConnectionNotEstablished
ActiveRecord::Base.establish_connection(ENV["DATABASE_URL"] || YAML.load_file("#{cwd}/config/database.yml")[ENV["RACK_ENV"]])
ActiveRecord::Base.verify_active_connections!
# if you use NewRelic, set your NEWRELIC_DISPATCHER environment variable on heroku, per
# https://github.com/puma/puma/issues/128 - may not be needed for future releases of Puma
heroku config:add NEWRELIC_DISPATCHER=Puma
@mpoisot
Copy link

mpoisot commented Mar 6, 2013

heroku config:add NEWRELIC_DISPATCHER=Puma will make New Relic think ALL Heroku processes are Pumas, including workers and one-off heroku run rails c.

I know Puma 2 makes this setting unnecessary, but it's still in beta so I'm on the latest 1x (1.6.3).

Does anybody know how to detect what Heroku PS type was invoked? Or some other way to tell if I'm running on a web dyno or not? I figure I can use that knowledge in an initializer to only set ENV[NEWRELIC_DISPATCHER]=Puma for web dynos.

@thomasklemm
Copy link

An alternative approach that helps increase AR's connection pool size on Heroku has been published in the Heroku dev center.

@calasyr
Copy link

calasyr commented May 11, 2013

config.threadsafe! is deprecated for rails 4:

"Rails applications behave by default as thread safe in production as long as config.cache_classes and config.eager_load are set to true."

@GantMan
Copy link

GantMan commented Jul 8, 2013

ActiveRecord::Base.verify_active_connections! is also deprecated, and should be removed.

@subelsky
Copy link
Author

yeah you don't need a puma.rb file. That was vestigial from when I was on unicorn, and I thought had read somewhere that puma needed it to be able to restart cleanly

@subelsky
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment