aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier Noria <fxn@hashref.com>2019-04-11 22:43:45 +0200
committerXavier Noria <fxn@hashref.com>2019-04-11 23:10:13 +0200
commit7b6b10542d5dac2b50f2578143dc5d70120d1146 (patch)
tree97faab6b3ebdd667a068d8955ecfa8ffa392a589
parent23392eff9f8065475739e58232a5db97604f8056 (diff)
downloadrails-7b6b10542d5dac2b50f2578143dc5d70120d1146.tar.gz
rails-7b6b10542d5dac2b50f2578143dc5d70120d1146.tar.bz2
rails-7b6b10542d5dac2b50f2578143dc5d70120d1146.zip
improves the reloading disabled error message
The original message from Zeitwerk is "can't reload, please call loader.enable_reloading before setup (Zeitwerk::Error)", which is not very informative for Rails programmers. Rails should err with a message worded in terms of its interface.
-rw-r--r--Gemfile.lock4
-rw-r--r--activesupport/activesupport.gemspec2
-rw-r--r--activesupport/lib/active_support/dependencies/zeitwerk_integration.rb6
-rw-r--r--railties/test/application/zeitwerk_integration_test.rb9
4 files changed, 17 insertions, 4 deletions
diff --git a/Gemfile.lock b/Gemfile.lock
index 8e219f3f31..b92603d799 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -71,7 +71,7 @@ PATH
i18n (>= 0.7, < 2)
minitest (~> 5.1)
tzinfo (~> 1.1)
- zeitwerk (~> 2.1)
+ zeitwerk (~> 2.1, >= 2.1.2)
rails (6.0.0.beta3)
actioncable (= 6.0.0.beta3)
actionmailbox (= 6.0.0.beta3)
@@ -526,7 +526,7 @@ GEM
websocket-extensions (0.1.3)
xpath (3.2.0)
nokogiri (~> 1.8)
- zeitwerk (2.1.0)
+ zeitwerk (2.1.2)
PLATFORMS
java
diff --git a/activesupport/activesupport.gemspec b/activesupport/activesupport.gemspec
index 546cc1797a..dd2340cdd3 100644
--- a/activesupport/activesupport.gemspec
+++ b/activesupport/activesupport.gemspec
@@ -34,5 +34,5 @@ Gem::Specification.new do |s|
s.add_dependency "tzinfo", "~> 1.1"
s.add_dependency "minitest", "~> 5.1"
s.add_dependency "concurrent-ruby", "~> 1.0", ">= 1.0.2"
- s.add_dependency "zeitwerk", "~> 2.1"
+ s.add_dependency "zeitwerk", "~> 2.1", ">= 2.1.2"
end
diff --git a/activesupport/lib/active_support/dependencies/zeitwerk_integration.rb b/activesupport/lib/active_support/dependencies/zeitwerk_integration.rb
index b0f7a3f9cc..f16a9f7e57 100644
--- a/activesupport/lib/active_support/dependencies/zeitwerk_integration.rb
+++ b/activesupport/lib/active_support/dependencies/zeitwerk_integration.rb
@@ -9,7 +9,11 @@ module ActiveSupport
module Decorations
def clear
Dependencies.unload_interlock do
- Rails.autoloaders.main.reload
+ begin
+ Rails.autoloaders.main.reload
+ rescue Zeitwerk::ReloadingDisabledError
+ raise "reloading is disabled because config.cache_classes is true"
+ end
end
end
diff --git a/railties/test/application/zeitwerk_integration_test.rb b/railties/test/application/zeitwerk_integration_test.rb
index b248459e47..40d06ee999 100644
--- a/railties/test/application/zeitwerk_integration_test.rb
+++ b/railties/test/application/zeitwerk_integration_test.rb
@@ -156,6 +156,15 @@ class ZeitwerkIntegrationTest < ActiveSupport::TestCase
assert_not Rails.autoloaders.once.reloading_enabled?
end
+ test "reloading raises if config.cache_classes is true" do
+ boot("production")
+
+ e = assert_raises(StandardError) do
+ deps.clear
+ end
+ assert_equal "reloading is disabled because config.cache_classes is true", e.message
+ end
+
test "eager loading loads code in engines" do
$test_blog_engine_eager_loaded = false