Class: Fourchette::Heroku
- Inherits:
-
Object
- Object
- Fourchette::Heroku
- Includes:
- Logger
- Defined in:
- lib/fourchette/heroku.rb
Instance Method Summary collapse
- #app_exists?(name) ⇒ Boolean
- #client ⇒ Object
- #config_vars(app_name) ⇒ Object
- #copy_add_ons(from, to) ⇒ Object
- #copy_config(from, to) ⇒ Object
- #copy_pg(from, to) ⇒ Object
- #copy_RACK_AND_RAILS_ENV_again(from, to) ⇒ Object
- #create_app(name) ⇒ Object
- #delete(app_name) ⇒ Object
- #fork(from, to) ⇒ Object
- #get_original_env(from) ⇒ Object
- #git_url(app_name) ⇒ Object
- #pg_enabled?(app) ⇒ Boolean
Methods included from Logger
Instance Method Details
#app_exists?(name) ⇒ Boolean
4 5 6 |
# File 'lib/fourchette/heroku.rb', line 4 def app_exists? name client.app.list.collect { |app| app if app['name'] == name }.reject(&:nil?).any? end |
#client ⇒ Object
21 22 23 24 25 26 27 |
# File 'lib/fourchette/heroku.rb', line 21 def client unless @heroku_client api_key = ENV['FOURCHETTE_HEROKU_API_KEY'] @heroku_client = PlatformAPI.connect(api_key) end @heroku_client end |
#config_vars(app_name) ⇒ Object
29 30 31 |
# File 'lib/fourchette/heroku.rb', line 29 def config_vars app_name client.config_var.info(app_name) end |
#copy_add_ons(from, to) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/fourchette/heroku.rb', line 50 def copy_add_ons from, to logger.info "Copying addons from #{from} to #{to}" from_addons = client.addon.list(from) from_addons.each do |addon| name = addon['plan']['name'] begin logger.info "Adding #{name} to #{to}" client.addon.create(to, { plan: name }) rescue Excon::Errors::UnprocessableEntity => e logger.error "Failed to copy addon #{name}" logger.error e end end end |
#copy_config(from, to) ⇒ Object
42 43 44 45 46 47 48 |
# File 'lib/fourchette/heroku.rb', line 42 def copy_config from, to logger.info "Copying configs from #{from} to #{to}" from_congig_vars = config_vars(from) # WE SHOULD NOT MOVE THE HEROKU_POSTGRES_*_URL... from_congig_vars.reject! { |k, v| k.start_with?('HEROKU_POSTGRESQL_') && k.end_with?('_URL') } client.config_var.update(to, from_congig_vars) end |
#copy_pg(from, to) ⇒ Object
65 66 67 68 69 70 71 72 73 |
# File 'lib/fourchette/heroku.rb', line 65 def copy_pg from, to if pg_enabled?(from) logger.info "Copying Postgres's data from #{from} to #{to}" backup = Fourchette::Pgbackups.new backup.copy(from, to) else logger.info "Postgres not enabled on #{from}. Skipping data copy." end end |
#copy_RACK_AND_RAILS_ENV_again(from, to) ⇒ Object
75 76 77 78 79 80 |
# File 'lib/fourchette/heroku.rb', line 75 def copy_RACK_AND_RAILS_ENV_again(from, to) env_to_update = get_original_env(from) unless env_to_update.empty? client.config_var.update(to, env_to_update) end end |
#create_app(name) ⇒ Object
37 38 39 40 |
# File 'lib/fourchette/heroku.rb', line 37 def create_app name logger.info "Creating #{name}" client.app.create({ name: name }) end |
#delete(app_name) ⇒ Object
16 17 18 19 |
# File 'lib/fourchette/heroku.rb', line 16 def delete app_name logger.info "Deleting #{app_name}" client.app.delete(app_name) end |
#fork(from, to) ⇒ Object
8 9 10 11 12 13 14 |
# File 'lib/fourchette/heroku.rb', line 8 def fork from, to create_app(to) copy_config(from, to) copy_add_ons(from, to) copy_pg(from, to) copy_RACK_AND_RAILS_ENV_again(from, to) end |
#get_original_env(from) ⇒ Object
82 83 84 85 86 87 88 89 90 |
# File 'lib/fourchette/heroku.rb', line 82 def get_original_env(from) environments = {} ['RACK_ENV', 'RAILS_ENV'].each do |var| if client.config_var.info(from)[var] environments[var] = client.config_var.info(from)[var] end end environments end |
#git_url(app_name) ⇒ Object
33 34 35 |
# File 'lib/fourchette/heroku.rb', line 33 def git_url app_name client.app.info(app_name)['git_url'] end |
#pg_enabled?(app) ⇒ Boolean
92 93 94 95 96 |
# File 'lib/fourchette/heroku.rb', line 92 def pg_enabled?(app) client.addon.list(app).any? do |addon| addon['addon_service']['name'] == 'heroku-postgresql' end end |