Browse Source

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
Eugen Rochko 2 years ago
committed by GitHub
parent
commit
018a9e4e7f
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 41 additions and 0 deletions
  1. +1
    -0
      .rubocop.yml
  2. +15
    -0
      config/initializers/0_post_deployment_migrations.rb
  3. +0
    -0
     
  4. +17
    -0
      lib/generators/post_deployment_migration_generator.rb
  5. +8
    -0
      lib/templates/rails/post_deployment_migration/migration.rb

+ 1
- 0
.rubocop.yml View File

@ -11,6 +11,7 @@ AllCops:
- 'Vagrantfile'
- 'vendor/**/*'
- 'lib/json_ld/*'
- 'lib/templates/**/*'
Bundler/OrderedGems:
Enabled: false

+ 15
- 0
config/initializers/0_post_deployment_migrations.rb View File

@ -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
View File


+ 17
- 0
lib/generators/post_deployment_migration_generator.rb View File

@ -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

+ 8
- 0
lib/templates/rails/post_deployment_migration/migration.rb View File

@ -0,0 +1,8 @@
# frozen_string_literal: true
class <%= migration_class_name %> < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def change
end
end

Loading…
Cancel
Save