diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2018-08-13 13:40:01 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-13 13:40:01 +0200 |
commit | 018a9e4e7fdfac0f2e482f4b5fa66247afbc2ddb (patch) | |
tree | 2483cbc34609868ac905f43752086c467b9b2bcd | |
parent | b7091c6c0fe057f7469a97f138c3e2451d95a28f (diff) |
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: https://gitlab.com/gitlab-org/gitlab-ce/commit/83c8241160ed48ab066e2c5bd58d0914a745197c
-rw-r--r-- | .rubocop.yml | 1 | ||||
-rw-r--r-- | config/initializers/0_post_deployment_migrations.rb | 15 | ||||
-rw-r--r-- | db/post_migrate/.gitkeep | 0 | ||||
-rw-r--r-- | lib/generators/post_deployment_migration_generator.rb | 17 | ||||
-rw-r--r-- | lib/templates/rails/post_deployment_migration/migration.rb | 8 |
5 files changed, 41 insertions, 0 deletions
diff --git a/.rubocop.yml b/.rubocop.yml index 6faeaca6f..4f9e09b43 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -11,6 +11,7 @@ AllCops: - 'Vagrantfile' - 'vendor/**/*' - 'lib/json_ld/*' + - 'lib/templates/**/*' Bundler/OrderedGems: Enabled: false diff --git a/config/initializers/0_post_deployment_migrations.rb b/config/initializers/0_post_deployment_migrations.rb new file mode 100644 index 000000000..61121ccd7 --- /dev/null +++ b/config/initializers/0_post_deployment_migrations.rb @@ -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 diff --git a/db/post_migrate/.gitkeep b/db/post_migrate/.gitkeep new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/db/post_migrate/.gitkeep diff --git a/lib/generators/post_deployment_migration_generator.rb b/lib/generators/post_deployment_migration_generator.rb new file mode 100644 index 000000000..798c01b88 --- /dev/null +++ b/lib/generators/post_deployment_migration_generator.rb @@ -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 diff --git a/lib/templates/rails/post_deployment_migration/migration.rb b/lib/templates/rails/post_deployment_migration/migration.rb new file mode 100644 index 000000000..503205b84 --- /dev/null +++ b/lib/templates/rails/post_deployment_migration/migration.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +class <%= migration_class_name %> < ActiveRecord::Migration[5.2] + disable_ddl_transaction! + + def change + end +end |