diff options
author | Stan Hu <stanhu@gmail.com> | 2017-06-17 07:35:30 -0700 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2017-06-17 13:00:16 -0700 |
commit | f7d0686702bc8991ec40594c001e308c8cdc3d8b (patch) | |
tree | db7e1d2c6295d27c699522e5fa85bc1340611bda | |
parent | ec944417b7d721d046b0546bdd717d1ca051a7ce (diff) | |
download | gitlab-ce-sh-fix-rake-migrations.tar.gz |
Return fake application settings if we're in a Rake task and have migrationssh-fix-rake-migrations
-rw-r--r-- | lib/gitlab/current_settings.rb | 10 | ||||
-rw-r--r-- | spec/lib/gitlab/current_settings_spec.rb | 7 |
2 files changed, 15 insertions, 2 deletions
diff --git a/lib/gitlab/current_settings.rb b/lib/gitlab/current_settings.rb index 48735fd197d..733d5f72f73 100644 --- a/lib/gitlab/current_settings.rb +++ b/lib/gitlab/current_settings.rb @@ -29,6 +29,8 @@ module Gitlab return settings if settings.present? return fake_application_settings unless connect_to_db? + # We can't run rake db:migrate if application settings may need a migration + return fake_application_settings if rake_task? && ActiveRecord::Migrator.needs_migration? begin db_settings = ::ApplicationSetting.current @@ -62,10 +64,14 @@ module Gitlab active_db_connection = ActiveRecord::Base.connection.active? rescue false active_db_connection && - ActiveRecord::Base.connection.table_exists?('application_settings') && - !ActiveRecord::Migrator.needs_migration? + ActiveRecord::Base.connection.table_exists?('application_settings') rescue ActiveRecord::NoDatabaseError false end + + def rake_task? + # gitlab-rake ends up calling /opt/gitlab/embedded/bin/rake + $0.end_with?('rake') + end end end diff --git a/spec/lib/gitlab/current_settings_spec.rb b/spec/lib/gitlab/current_settings_spec.rb index fda39d78610..85bff1cf46c 100644 --- a/spec/lib/gitlab/current_settings_spec.rb +++ b/spec/lib/gitlab/current_settings_spec.rb @@ -32,6 +32,13 @@ describe Gitlab::CurrentSettings do expect(current_application_settings).to be_a(ApplicationSetting) end + + it 'returns an in-memory ApplicationSetting object if migrations are present in a Rake task' do + allow_any_instance_of(described_class).to receive(:rake_task?).and_return(true) + expect(ActiveRecord::Migrator).to receive(:needs_migration?).and_return(true) + + expect(current_application_settings).to be_a(OpenStruct) + end end context 'with DB unavailable' do |