def app_name_from_environment(env)
case env.downcase when "production" ENV['HEROKU_APPNAME_PRODUCTION'] || "#{Rails.application.class.parent_name.underscore.gsub('_','-')}" when "staging" ENV['HEROKU_APPNAME_STAGING'] || "#{Rails.application.class.parent_name.underscore.gsub('_','-')}-staging" end
end
def push_command_from_env(env)
case env when "production" "git push #{env} master" when "staging" # heroku requires that deployes be pushed to the master branch on heroku git repo "git push #{env} staging:master" end
end
desc 'Deploy Safely to Heroku' task :deploy do
env = ENV['ENV'] abort "Please specify ENV={production|staging}" unless env app_name = app_name_from_environment(env) #take db backup first sh "heroku pg:backups capture --app #{app_name}" #push up new code release sh push_command_from_env(env) #migrate database sh "heroku run rake db:migrate --app #{app_name}" #restart dynos to ensure all users get the new released version immediately sh "heroku restart --app #{app_name}" #warm up the Heroku dynos sh "curl -o /dev/null http://#{app_name}.herokuapp.com"
end
namespace :deploy do
desc "Deploy to Heroku's Staging Environment" desc "Deploy to Heroku's Production Environment" task :production do ENV['ENV'] = "production" sh "git push origin master" Rake::Task["deploy"].invoke end task :staging do ENV['ENV'] = "staging" sh "git push origin staging" Rake::Task["deploy"].invoke end namespace :production do desc 'Quick Deploy to Production, without running migrations.' task :quick do ENV['ENV'] = "production" env = ENV['ENV'] app_name = app_name_from_environment(env) Bundler.with_clean_env do puts `git push origin master` puts `git push production master` puts `heroku restart --app #{app_name}` end end end namespace :staging do desc 'Quick Deploy to Staging, without running migrations.' task :quick do ENV['ENV'] = "staging" env = ENV['ENV'] app_name = app_name_from_environment(env) Bundler.with_clean_env do puts `git push origin staging` puts `git push staging staging:master` puts `heroku restart --app #{app_name}` end end end
end