Skip to content

Commit 2c4e9c6

Browse files
authored
Do not update load_defaults version when running app:update (rails#31951)
Incompatible settings are included in the settings set by `load_defaults`. So, I think that target version should be updated by a user when becomes available, and should not be updated with `app:update`.
1 parent c01c38e commit 2c4e9c6

File tree

4 files changed

+26
-2
lines changed

4 files changed

+26
-2
lines changed

railties/lib/rails/application/configuration.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class Configuration < ::Rails::Engine::Configuration
1919
:read_encrypted_secrets, :log_level, :content_security_policy_report_only,
2020
:require_master_key
2121

22-
attr_reader :encoding, :api_only
22+
attr_reader :encoding, :api_only, :loaded_config_version
2323

2424
def initialize(*)
2525
super
@@ -58,6 +58,7 @@ def initialize(*)
5858
@content_security_policy = nil
5959
@content_security_policy_report_only = false
6060
@require_master_key = false
61+
@loaded_config_version = nil
6162
end
6263

6364
def load_defaults(target_version)
@@ -118,6 +119,8 @@ def load_defaults(target_version)
118119
else
119120
raise "Unknown version #{target_version.to_s.inspect}"
120121
end
122+
123+
@loaded_config_version = target_version
121124
end
122125

123126
def encoding=(value)

railties/lib/rails/generators/rails/app/app_generator.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,8 @@ def config_when_updating
130130
assets_config_exist = File.exist?("config/initializers/assets.rb")
131131
csp_config_exist = File.exist?("config/initializers/content_security_policy.rb")
132132

133+
@config_target_version = Rails.application.config.loaded_config_version || "5.0"
134+
133135
config
134136

135137
unless cookie_serializer_config_exist
@@ -233,6 +235,10 @@ def tmp
233235
def vendor
234236
empty_directory_with_keep_file "vendor"
235237
end
238+
239+
def config_target_version
240+
defined?(@config_target_version) ? @config_target_version : Rails::VERSION::STRING.to_f
241+
end
236242
end
237243

238244
module Generators

railties/lib/rails/generators/rails/app/templates/config/application.rb.tt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Bundler.require(*Rails.groups)
2424
module <%= app_const_base %>
2525
class Application < Rails::Application
2626
# Initialize configuration defaults for originally generated Rails version.
27-
config.load_defaults <%= Rails::VERSION::STRING.to_f %>
27+
config.load_defaults <%= build(:config_target_version) %>
2828

2929
# Settings in config/environments/* take precedence over those specified here.
3030
# Application configuration can go into files in config/initializers

railties/test/generators/app_generator_test.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,8 @@ def test_new_application_load_defaults
219219
run_generator [app_root]
220220
output = nil
221221

222+
assert_file "#{app_root}/config/application.rb", /\s+config\.load_defaults #{Rails::VERSION::STRING.to_f}/
223+
222224
Dir.chdir(app_root) do
223225
output = `./bin/rails r "puts Rails.application.config.assets.unknown_asset_fallback"`
224226
end
@@ -367,6 +369,19 @@ def test_app_update_does_not_generate_active_storage_contents_when_skip_active_r
367369
end
368370
end
369371

372+
def test_app_update_does_not_change_config_target_version
373+
run_generator
374+
375+
FileUtils.cd(destination_root) do
376+
config = "config/application.rb"
377+
content = File.read(config)
378+
File.write(config, content.gsub(/config\.load_defaults #{Rails::VERSION::STRING.to_f}/, "config.load_defaults 5.1"))
379+
quietly { system("bin/rails app:update") }
380+
end
381+
382+
assert_file "config/application.rb", /\s+config\.load_defaults 5\.1/
383+
end
384+
370385
def test_application_names_are_not_singularized
371386
run_generator [File.join(destination_root, "hats")]
372387
assert_file "hats/config/environment.rb", /Rails\.application\.initialize!/

0 commit comments

Comments
 (0)