Skip to content

Instantly share code, notes, and snippets.

@momolog
Last active August 29, 2015 13:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save momolog/10020705 to your computer and use it in GitHub Desktop.
Save momolog/10020705 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
require 'optparse'
options = {}
OptionParser.new do |opts|
opts.banner = "Usage: example.rb [options]"
opts.on("-l", "--localdb DBNAME", "local DB name") do |ldb|
options[:local_db_name] = ldb
end
end.parse!
# p options
# p ARGV
command = ARGV[0] or abort "no command given"
p command
appname = ARGV[1] || `echo ${PWD##*/}`.strip
p appname
local_db_name = options[:local_db_name] || appname
heroku_db_name = `heroku config --app #{appname} | grep POSTGRESQL`.scan(/SQL_(\w+)_URL/)[0][0]
out = []
case command
when 'pull'
if `psql -l | grep #{local_db_name} | wc -l`.strip.to_i > 0
out << "psql -d #{local_db_name} -c \"SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '#{local_db_name}' AND pid <> pg_backend_pid();\""
out << "dropdb --if-exists #{local_db_name}"
else
p "local db does not exist, no need to drop"
end
out << "heroku pg:pull #{appname}::#{heroku_db_name} #{local_db_name}"
when 'push'
out << "heroku pg:reset HEROKU_POSTGRESQL_#{heroku_db_name} --app #{appname} --confirm #{appname}"
out << "heroku pg:push #{local_db_name} #{appname}::#{heroku_db_name}"
else
p "command #{command} not known."
exit
end
out.each do |cmd|
`#{cmd}`
end
@azinazadi
Copy link

+1 gonna try it

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