Created
August 16, 2011 17:40
-
-
Save treybean/1149663 to your computer and use it in GitHub Desktop.
Heroku Deployment Script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
# Usage | |
# ./deploy [staging|production] <options> | |
# | |
# Options | |
# -m or --maintenance - Put the application into maintenance mode | |
# -b or --branch - deploy from a branch other than "master" | |
if ['staging', 'production'].include? ARGV[0] | |
remote = ARGV[0] | |
maintenance = ARGV.include?('-m') || ARGV.include?('--maintenance') | |
branch = "master" | |
alt_branch = ARGV.index('-b') || ARGV.index('--branch') | |
repo = '<YOUR MAIN REPO>' | |
revision=`git rev-parse master` | |
case remote | |
when 'staging' | |
app = '<STAGING APP NAME ON HEROKU>' | |
hoptoad_env = 'review' | |
when 'production' | |
app = '<STAGING APP NAME ON HEROKU>' | |
hoptoad_env = 'production' | |
end | |
config_vars = `heroku config --app #{app}` | |
asset_host = config_vars.split(/\n/).select{|v| v =~ /ASSET_HOST/}.first | |
if asset_host | |
ENV["ASSET_BUCKET"] = asset_host.split("=>").last.split("/").last.strip | |
puts "packaging assets into #{ENV["ASSET_BUCKET"]}...." | |
`bundle exec jammit-s3` | |
if maintenance | |
puts 'putting app into maintenance mode' | |
`heroku maintenance:on --app #{app}` | |
end | |
if alt_branch | |
branch = ARGV[alt_branch.to_i + 1] | |
end | |
puts "pushing code from #{branch}..." | |
`git push -f #{remote} master` | |
puts "migrating database..." | |
puts `heroku rake db:migrate --app #{app}` | |
puts "seeding database..." | |
puts `heroku rake db:seed --app #{app}` | |
if maintenance | |
puts 'bringin app back out of maintenance mode...' | |
`heroku maintenance:off --app #{app}` | |
end | |
puts "notifying hoptoad (rake hoptoad:deploy TO=#{hoptoad_env} REVISION=#{revision} REPO=#{repo})" | |
`bundle exec rake hoptoad:deploy TO=#{hoptoad_env} REVISION=#{revision} REPO=#{repo}` | |
puts '.....done. Celebrate!' | |
else | |
puts "ERROR!: You must have an ASSET_HOST variable set on your deploy target" | |
end | |
else | |
puts "You must specify staging or production" | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment