summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
authorStan Hu <stanhu@gmail.com>2017-03-18 02:29:25 -0700
committerStan Hu <stanhu@gmail.com>2017-03-18 15:39:48 -0700
commit681af5bc4fe646a981c1d0bbbeddef00f5cee3b8 (patch)
tree9a65ccf9ccd4e2cd4836638b42613e6bc0ae77f0 /app/models
parent5d71d9fb9d6ca89710549fbfef62d105d9544a30 (diff)
downloadgitlab-ce-681af5bc4fe646a981c1d0bbbeddef00f5cee3b8.tar.gz
Fix Error 500 when application settings are saved
Due to a Rails bug, fetching the application settings from Redis may prevent the attribute methods from being loaded for the `ApplicationSetting` model. More details here: https://github.com/rails/rails/issues/27348 There was also a secondary problem introduced by overriding these association methods which caused all default visibility levels to be set to `nil`. Before, the previous implementation allowed the string "20" to be saved as an integer, while now a table lookup happens before that. We fix this by enforcing the integer value in the controller and default to PRIVATE. Closes #29674
Diffstat (limited to 'app/models')
-rw-r--r--app/models/application_setting.rb9
1 files changed, 9 insertions, 0 deletions
diff --git a/app/models/application_setting.rb b/app/models/application_setting.rb
index be632930895..671a0fe98cc 100644
--- a/app/models/application_setting.rb
+++ b/app/models/application_setting.rb
@@ -163,6 +163,8 @@ class ApplicationSetting < ActiveRecord::Base
end
def self.current
+ ensure_cache_setup
+
Rails.cache.fetch(CACHE_KEY) do
ApplicationSetting.last
end
@@ -176,9 +178,16 @@ class ApplicationSetting < ActiveRecord::Base
end
def self.cached
+ ensure_cache_setup
Rails.cache.fetch(CACHE_KEY)
end
+ def self.ensure_cache_setup
+ # This is a workaround for a Rails bug that causes attribute methods not
+ # to be loaded when read from cache: https://github.com/rails/rails/issues/27348
+ ApplicationSetting.define_attribute_methods
+ end
+
def self.defaults_ce
{
after_sign_up_text: nil,