From 924e53f1be390aa7155dd7f390b1460f109b0587 Mon Sep 17 00:00:00 2001 From: Thierry Joyal Date: Mon, 27 Feb 2017 21:55:30 +0000 Subject: [PATCH] [Railties] Add config rake_eager_load --- railties/CHANGELOG.md | 8 ++++++ railties/lib/rails/application.rb | 2 +- .../lib/rails/application/configuration.rb | 3 ++- .../test/application/configuration_test.rb | 16 ++++++++++++ railties/test/application/rake_test.rb | 25 ++++++++++++++++++- 5 files changed, 51 insertions(+), 3 deletions(-) diff --git a/railties/CHANGELOG.md b/railties/CHANGELOG.md index 3afadc8cba..631bd4d043 100644 --- a/railties/CHANGELOG.md +++ b/railties/CHANGELOG.md @@ -1,3 +1,11 @@ +* Allow configuration of eager_load behaviour for rake environment: + + `config.rake_eager_load` + + Defaults to `false` as per previous behaviour. + + *Thierry Joyal* + ## Rails 5.1.0.beta1 (February 23, 2017) ## * Fix running multiple tests in one `rake` command diff --git a/railties/lib/rails/application.rb b/railties/lib/rails/application.rb index 89f7b5991f..97122ea9bc 100644 --- a/railties/lib/rails/application.rb +++ b/railties/lib/rails/application.rb @@ -438,7 +438,7 @@ module Rails super require "rails/tasks" task :environment do - ActiveSupport.on_load(:before_initialize) { config.eager_load = false } + ActiveSupport.on_load(:before_initialize) { config.eager_load = config.rake_eager_load } require_environment! end diff --git a/railties/lib/rails/application/configuration.rb b/railties/lib/rails/application/configuration.rb index b0592151b7..96e3b52fec 100644 --- a/railties/lib/rails/application/configuration.rb +++ b/railties/lib/rails/application/configuration.rb @@ -14,7 +14,7 @@ module Rails :ssl_options, :public_file_server, :session_options, :time_zone, :reload_classes_only_on_change, :beginning_of_week, :filter_redirect, :x, :enable_dependency_loading, - :read_encrypted_secrets + :rake_eager_load, :read_encrypted_secrets attr_writer :log_level attr_reader :encoding, :api_only @@ -52,6 +52,7 @@ module Rails @debug_exception_response_format = nil @x = Custom.new @enable_dependency_loading = false + @rake_eager_load = false @read_encrypted_secrets = false end diff --git a/railties/test/application/configuration_test.rb b/railties/test/application/configuration_test.rb index 14433fbba0..82ff803eba 100644 --- a/railties/test/application/configuration_test.rb +++ b/railties/test/application/configuration_test.rb @@ -1545,5 +1545,21 @@ module ApplicationTests assert_equal 301, last_response.status assert_equal "https://example.org/", last_response.location end + + test "rake_eager_load is false by default" do + app "development" + assert_equal false, Rails.application.config.rake_eager_load + end + + test "rake_eager_load is set correctly" do + add_to_config <<-RUBY + config.root = "#{app_path}" + config.rake_eager_load = true + RUBY + + app "development" + + assert_equal true, Rails.application.config.rake_eager_load + end end end diff --git a/railties/test/application/rake_test.rb b/railties/test/application/rake_test.rb index 1b64a0a1ca..1d1489869a 100644 --- a/railties/test/application/rake_test.rb +++ b/railties/test/application/rake_test.rb @@ -94,7 +94,7 @@ module ApplicationTests assert_match "Hello world", output end - def test_should_not_eager_load_model_for_rake + def test_should_not_eager_load_model_for_rake_when_rake_eager_load_is_false add_to_config <<-RUBY rake_tasks do task do_nothing: :environment do @@ -116,6 +116,29 @@ module ApplicationTests end end + def test_should_eager_load_model_for_rake_when_rake_eager_load_is_true + add_to_config <<-RUBY + rake_tasks do + task do_something: :environment do + puts "Answer: " + Hello::TEST.to_s + end + end + RUBY + + add_to_env_config "production", <<-RUBY + config.rake_eager_load = true + RUBY + + app_file "app/models/hello.rb", <<-RUBY + class Hello + TEST = 42 + end + RUBY + + output = Dir.chdir(app_path) { `bin/rails do_something RAILS_ENV=production` } + assert_equal "Answer: 42\n", output + end + def test_code_statistics_sanity assert_match "Code LOC: 26 Test LOC: 0 Code to Test Ratio: 1:0.0", Dir.chdir(app_path) { `bin/rails stats` }