If migrations are pending, make CurrentSettings use existing values and populate missing columns with defaults
master was failing because ApplicationSetting.create_from_defaults
attempted
to write to a column that did not exist in the database. This occurred in a
rake db:migrate
task, which was unable to perform the migration that would
have added the missing column in the first place.
In 9.3 RC2, we also had a bug where password sign-ins were disabled because
there were many pending migrations. The problem occurred because
fake_application_settings
was being returned with an OpenStruct that did not
include the predicate method signup_enabled?
. As a result, the value would
erroneously return nil
instead of true
. This commit uses the values of the
defaults to mimic this behavior.
This commit also refactors some of the logic to be clearer.
Partially addresses #33810 (moved)