class Parity::Backup
Constants
- BLANK_ARGUMENTS
- DATABASE_KEY_NAME
- DATABASE_YML_RELATIVE_PATH
- DEVELOPMENT_ENVIRONMENT_KEY_NAME
- PRIMARY_DATABASE_KEY_NAME
Attributes
additional_args[R]
app_argument[R]
from[R]
parallelize[R]
parallelize?[R]
to[R]
Public Class Methods
new(args)
click to toggle source
# File lib/parity/backup.rb, line 11 def initialize(args) puts "*"*60 puts args puts "*"*60 @from, @to = args.values_at(:from, :to) @additional_args = args[:additional_args] || BLANK_ARGUMENTS @parallelize = args[:parallelize] || false @app_argument = args[:app_argument] end
Public Instance Methods
restore()
click to toggle source
# File lib/parity/backup.rb, line 21 def restore if to == DEVELOPMENT_ENVIRONMENT_KEY_NAME restore_to_development elsif from == DEVELOPMENT_ENVIRONMENT_KEY_NAME restore_from_development else restore_to_remote_environment end end
Private Instance Methods
backup_from()
click to toggle source
# File lib/parity/backup.rb, line 111 def backup_from "`#{remote_db_backup_url}` DATABASE" end
database_yaml_file()
click to toggle source
# File lib/parity/backup.rb, line 131 def database_yaml_file ERB.new(IO.read(DATABASE_YML_RELATIVE_PATH)).result end
delete_local_temp_backup()
click to toggle source
# File lib/parity/backup.rb, line 93 def delete_local_temp_backup Kernel.system("rm tmp/latest.backup") end
delete_rails_production_environment_settings()
click to toggle source
# File lib/parity/backup.rb, line 97 def delete_rails_production_environment_settings Kernel.system(<<-SHELL) psql #{development_db} -c "CREATE TABLE IF NOT EXISTS public.ar_internal_metadata (key character varying NOT NULL, value character varying, created_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL, CONSTRAINT ar_internal_metadata_pkey PRIMARY KEY (key)); UPDATE ar_internal_metadata SET value = 'development' WHERE key = 'environment'" SHELL end
development_db()
click to toggle source
# File lib/parity/backup.rb, line 119 def development_db db_configuration = YAML.safe_load(database_yaml_file, aliases: true). fetch(DEVELOPMENT_ENVIRONMENT_KEY_NAME) if db_configuration.key?(PRIMARY_DATABASE_KEY_NAME) db_configuration[PRIMARY_DATABASE_KEY_NAME]. fetch(DATABASE_KEY_NAME) else db_configuration.fetch(DATABASE_KEY_NAME) end end
download_remote_backup()
click to toggle source
# File lib/parity/backup.rb, line 79 def download_remote_backup Kernel.system( "curl -o tmp/latest.backup \"$(heroku pg:backups:url #{app_argument} #{from})\"", ) end
ensure_temp_directory_exists()
click to toggle source
# File lib/parity/backup.rb, line 75 def ensure_temp_directory_exists Kernel.system("mkdir -p tmp") end
heroku_app_name()
click to toggle source
# File lib/parity/backup.rb, line 67 def heroku_app_name if app_argument == "--app" to else HerokuAppName.new(to).to_s end end
processor_cores()
click to toggle source
# File lib/parity/backup.rb, line 135 def processor_cores if parallelize? && ruby_version_over_2_2? Etc.nprocessors else 1 end end
remote_db_backup_url()
click to toggle source
# File lib/parity/backup.rb, line 115 def remote_db_backup_url "heroku pg:backups:url #{app_argument} #{from}" end
reset_remote_database()
click to toggle source
# File lib/parity/backup.rb, line 60 def reset_remote_database Kernel.system( "heroku pg:reset #{app_argument} #{to} #{additional_args} "\ "--confirm #{heroku_app_name}", ) end
restore_from_development()
click to toggle source
# File lib/parity/backup.rb, line 37 def restore_from_development reset_remote_database Kernel.system( "heroku pg:push #{development_db} DATABASE_URL #{app_argument} #{to} "\ "#{additional_args}", ) end
restore_from_local_temp_backup()
click to toggle source
# File lib/parity/backup.rb, line 85 def restore_from_local_temp_backup Kernel.system( "pg_restore tmp/latest.backup --verbose --no-acl --no-owner "\ "--dbname #{development_db} --jobs=#{processor_cores} "\ "#{additional_args}", ) end
restore_to_development()
click to toggle source
# File lib/parity/backup.rb, line 45 def restore_to_development ensure_temp_directory_exists download_remote_backup wipe_development_database restore_from_local_temp_backup delete_local_temp_backup delete_rails_production_environment_settings end
restore_to_remote_environment()
click to toggle source
# File lib/parity/backup.rb, line 103 def restore_to_remote_environment reset_remote_database Kernel.system( "heroku pg:backups:restore #{backup_from} #{app_argument} #{to} "\ "#{additional_args}", ) end
ruby_version_over_2_2?()
click to toggle source
# File lib/parity/backup.rb, line 143 def ruby_version_over_2_2? Etc.respond_to?(:nprocessors) end
wipe_development_database()
click to toggle source
# File lib/parity/backup.rb, line 54 def wipe_development_database Kernel.system( "dropdb --if-exists #{development_db} && createdb #{development_db}", ) end