Add post-deployment migration system (#8182)
Adopted from GitLab CE. Generate new migration with:
rails g post_deployment_migration name_of_migration_here
By default they are run together with db:migrate. To not run them,
the env variable SKIP_POST_DEPLOYMENT_MIGRATIONS must be set
Code by Yorick Peterse <yorickpeterse@gmail.com>, see also:
83c8241160
master
parent
9e4ac1c12c
commit
fcb527cdd6
@ -0,0 +1,15 @@ |
|||||||
|
# Post deployment migrations are included by default. This file must be loaded |
||||||
|
# before other initializers as Rails may otherwise memoize a list of migrations |
||||||
|
# excluding the post deployment migrations. |
||||||
|
|
||||||
|
unless ENV['SKIP_POST_DEPLOYMENT_MIGRATIONS'] |
||||||
|
Rails.application.config.paths['db'].each do |db_path| |
||||||
|
path = Rails.root.join(db_path, 'post_migrate').to_s |
||||||
|
|
||||||
|
Rails.application.config.paths['db/migrate'] << path |
||||||
|
|
||||||
|
# Rails memoizes migrations at certain points where it won't read the above |
||||||
|
# path just yet. As such we must also update the following list of paths. |
||||||
|
ActiveRecord::Migrator.migrations_paths << path |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,17 @@ |
|||||||
|
# frozen_string_literal: true |
||||||
|
|
||||||
|
require 'rails/generators' |
||||||
|
|
||||||
|
module Rails |
||||||
|
class PostDeploymentMigrationGenerator < Rails::Generators::NamedBase |
||||||
|
def create_migration_file |
||||||
|
timestamp = Time.zone.now.strftime('%Y%m%d%H%M%S') |
||||||
|
|
||||||
|
template 'migration.rb', "db/post_migrate/#{timestamp}_#{file_name}.rb" |
||||||
|
end |
||||||
|
|
||||||
|
def migration_class_name |
||||||
|
file_name.camelize |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,8 @@ |
|||||||
|
# frozen_string_literal: true |
||||||
|
|
||||||
|
class <%= migration_class_name %> < ActiveRecord::Migration[5.2] |
||||||
|
disable_ddl_transaction! |
||||||
|
|
||||||
|
def change |
||||||
|
end |
||||||
|
end |
Loading…
Reference in new issue