Free addons!
heroku addons:add memcachier
heroku addons:add mandrill:starter
heroku addons:add newrelic
heroku addons:add pgbackups:auto-month
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 => 86400) # 1 day | |
# Configure rack-cache for using memcachier | |
config.action_dispatch.rack_cache = { | |
:metastore => client, | |
:entitystore => client | |
} | |
# Send emails via mandrill | |
ActionMailer::Base.delivery_method = :smtp | |
config.action_mailer.smtp_settings = { | |
:address => 'smtp.mandrillapp.com', | |
:port => '587', | |
:authentication => :plain, | |
:user_name => ENV['MANDRILL_USERNAME'], | |
:password => ENV['MANDRILL_APIKEY'], | |
:domain => 'heroku.com', | |
} | |
# ... | |
# 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 |
Can't precompile assets: undefined method
day' for 1:Fixnum
expires_in` takes the "default TTL in seconds if you do not pass TTL as a parameter to an individual operation, defaults to 0 or forever" [source: http://www.rubydoc.info/github/mperham/dalli/Dalli/Client]
If it's 1 day you want then value should be 86400
client = Dalli::Client.new(ENV["MEMCACHIER_SERVERS"],
:value_max_bytes => 10485760,
:expires_in => 86400)
These settings, minus Memcache, are in Suspenders. I prefer fronting my Heroku apps with Fastly to Memcache for the fastest static asset serving that only hits the Heroku dynos once per cache via origin pull.
You can change the Sendgrid by the Mandrill. In the free plan, they have the double of emails.
@mathieugagne Thanks! I just fixed it!
@maurogeorge Done!
@croaky Fastly charges a minimum of $50 a month right?
Could use a gem 'newrelic'
line in the Gemfile. I added the addon but missed the gem, and was wondering why Newrelic was "waiting on data" 😁
do u need to have workers?
The command is now heroku addons:create
instead of heroku addons:add
Also, heroku addons:add pgbackups:auto-month
doesn't exist. The only postgres backup system I see now is heroku addons:create autobus
sucker_punch is great but one must be really carefull if you aren't using ruby 2.0.