summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStan Hu <stanhu@gmail.com>2017-06-17 07:35:30 -0700
committerStan Hu <stanhu@gmail.com>2017-06-17 13:00:16 -0700
commitf7d0686702bc8991ec40594c001e308c8cdc3d8b (patch)
treedb7e1d2c6295d27c699522e5fa85bc1340611bda
parentec944417b7d721d046b0546bdd717d1ca051a7ce (diff)
downloadgitlab-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.rb10
-rw-r--r--spec/lib/gitlab/current_settings_spec.rb7
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