diff --git a/Rakefile b/Rakefile index eb2f158972d5c85227b7aa8e045e919189c0dfc6..9545516d2a916a77164bb3a04e65b4ae398d2b07 100755 --- a/Rakefile +++ b/Rakefile @@ -11,6 +11,8 @@ require File.expand_path('config/application', __dir__) relative_url_conf = File.expand_path('config/initializers/relative_url', __dir__) require relative_url_conf if File.exist?("#{relative_url_conf}.rb") +require File.expand_path('config/initializers/01_active_record_database_tasks_configuration_flag.rb', __dir__) + Gitlab::Application.load_tasks Knapsack.load_tasks if defined?(Knapsack) diff --git a/config/initializers/01_active_record_database_tasks_configuration_flag.rb b/config/initializers/01_active_record_database_tasks_configuration_flag.rb new file mode 100644 index 0000000000000000000000000000000000000000..37374a41a30c1ddc1885069d0407c70d9205f7e0 --- /dev/null +++ b/config/initializers/01_active_record_database_tasks_configuration_flag.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +if Rails::VERSION::MAJOR >= 7 + raise "Remove `#{__FILE__}`. This is backport of `database_tasks:` Rails 7.x feature." +end + +# This backports `database_tasks:` feature to skip running migrations for some databases +# PR: https://github.com/rails/rails/pull/42794/files + +module DatabaseTasks + module ActiveRecordDatabaseConfigurations + def configs_for(env_name: nil, name: nil, include_replicas: false) + configs = super + + unless include_replicas + if name + configs = nil unless configs&.database_tasks? + else + configs = configs.select do |db_config| + db_config.database_tasks? + end + end + end + + configs + end + end + + module ActiveRecordDatabaseConfigurationsHashConfig + def database_tasks? # :nodoc: + !replica? && !!configuration_hash.fetch(:database_tasks, true) + end + end +end + +ActiveRecord::DatabaseConfigurations.prepend(DatabaseTasks::ActiveRecordDatabaseConfigurations) +ActiveRecord::DatabaseConfigurations::HashConfig.prepend(DatabaseTasks::ActiveRecordDatabaseConfigurationsHashConfig)