Skip to content

Instantly share code, notes, and snippets.

@derwiki
Created May 13, 2016 23:10
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save derwiki/81ea11ffd8dd23d9cae7b706dea2dbc1 to your computer and use it in GitHub Desktop.
Save derwiki/81ea11ffd8dd23d9cae7b706dea2dbc1 to your computer and use it in GitHub Desktop.
`postdeploy` script for Heroku Review Apps that replaces the default Postgres DB with a MySQL DB from ClearDB.
#!/app/bin/ruby
require 'platform-api'
cleardb_url = ENV['CLEARDB_DATABASE_URL']
if cleardb_url.nil? || cleardb_url == ''
puts "Error: CLEARDB_DATABASE_URL not set"
exit -1
end
target_app = ENV['HEROKU_APP_NAME']
puts "target_app: #{ target_app }"
mysql_url = cleardb_url.sub('mysql', 'mysql2')
puts "mysql_url: #{ mysql_url }"
heroku = PlatformAPI.connect_oauth('REDACTED')
postgres_addon = heroku.addon.list_by_app(target_app).find do |addon|
addon.dig('addon_service', 'name') == "heroku-postgresql"
end
puts "Postgres addon: '#{ postgres_addon.inspect }'"
if postgres_addon
puts "Deleting postgres addon..."
heroku.addon.delete(target_app, postgres_addon["id"])
end
puts "Promoting '#{ mysql_url }' to DATABASE_URL for '#{ target_app }'..."
begin
heroku.config_var.update(target_app, { 'DATABASE_URL' => mysql_url })
rescue Excon::Errors::UnprocessableEntity => e
puts "#{ e.class }: #{ e.message }"
exit (-1)
end
puts "1 DATABASE_URL: #{ ENV['DATABASE_URL'] }"
`export DATABASE_URL='#{ mysql_url }'`
puts "2 DATABASE_URL: #{ ENV['DATABASE_URL'] }"
ENV['DATABASE_URL'] = mysql_url
puts "3 DATABASE_URL: #{ ENV['DATABASE_URL'] }"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment