Free addons!
heroku addons:add memcachier
heroku addons:add sendgrid
heroku addons:add newrelic
heroku addons:add pgbackups
heroku addons:add papertrail
| group :production do | |
| gem 'unicorn' | |
| # Enable gzip compression on heroku, but don't compress images. | |
| gem 'heroku-deflater' | |
| # Heroku injects it if it's not in there already | |
| gem 'rails_12factor' | |
| end | |
| gem 'memcachier' | |
| gem 'dalli' | |
| # Fast IO for memcache | |
| gem 'kgio' | |
| # Serve static assets through Rack + Memcache | |
| # https://devcenter.heroku.com/articles/rack-cache-memcached-rails31 | |
| gem 'rack-cache' |
| web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb |
| # config/environments/production.rb | |
| # ... | |
| # Enable Rails's static asset server for Heroku | |
| config.serve_static_assets = true | |
| # Set static assets cache header. rack-cache will cache those. | |
| config.static_cache_control = "public, max-age=31536000" | |
| config.cache_store = :dalli_store | |
| client = Dalli::Client.new(ENV["MEMCACHIER_SERVERS"], | |
| :value_max_bytes => 10485760, | |
| :expires_in => 1.day) | |
| # Configure rack-cache for using memcachier | |
| config.action_dispatch.rack_cache = { | |
| :metastore => client, | |
| :entitystore => client | |
| } | |
| # Send emails via sendgrid | |
| config.action_mailer.smtp_settings = { | |
| :address => 'smtp.sendgrid.net', | |
| :port => '587', | |
| :authentication => :plain, | |
| :user_name => ENV['SENDGRID_USERNAME'], | |
| :password => ENV['SENDGRID_PASSWORD'], | |
| :domain => 'heroku.com', | |
| :enable_starttls_auto => true | |
| } | |
| # ... | |
| # config/unicorn.rb | |
| worker_processes 3 | |
| timeout 30 | |
| preload_app true | |
| before_fork do |server, worker| | |
| # Replace with MongoDB or whatever | |
| if defined?(ActiveRecord::Base) | |
| ActiveRecord::Base.connection.disconnect! | |
| Rails.logger.info('Disconnected from ActiveRecord') | |
| end | |
| # If you are using Redis but not Resque, change this | |
| if defined?(Resque) | |
| Resque.redis.quit | |
| Rails.logger.info('Disconnected from Redis') | |
| end | |
| sleep 1 | |
| end | |
| after_fork do |server, worker| | |
| # Replace with MongoDB or whatever | |
| if defined?(ActiveRecord::Base) | |
| ActiveRecord::Base.establish_connection | |
| Rails.logger.info('Connected to ActiveRecord') | |
| end | |
| # If you are using Redis but not Resque, change this | |
| if defined?(Resque) | |
| Resque.redis = ENV['REDIS_URI'] | |
| Rails.logger.info('Connected to Redis') | |
| end | |
| end |