diff --git a/lib/spring/application.rb b/lib/spring/application.rb index 6fdbbb3a..d713e82e 100644 --- a/lib/spring/application.rb +++ b/lib/spring/application.rb @@ -124,6 +124,11 @@ def preload if defined?(Rails) && Rails.application watcher.add Rails.application.paths["config/initializers"] + Rails::Engine.descendants.each do |engine| + if engine.root.to_s.start_with?(Rails.root.to_s) + watcher.add engine.paths["config/initializers"].expanded + end + end watcher.add Rails.application.paths["config/database"] if secrets_path = Rails.application.paths["config/secrets"] watcher.add secrets_path diff --git a/test/support/acceptance_test.rb b/test/support/acceptance_test.rb index af2acc31..3c47923f 100644 --- a/test/support/acceptance_test.rb +++ b/test/support/acceptance_test.rb @@ -715,6 +715,31 @@ def exec_name test "rails db:system:change" do assert_success "bin/rails db:system:change --to=sqlite3" end + + test "watches embedded engine initializers" do + app.path("config/application.rb").write(<<~RUBY, mode: "a+") + + $LOAD_PATH << Pathname.new(__dir__).join("../engine/lib").realpath.to_s + require "my_engine" + RUBY + engine_lib = app.path("engine/lib/my_engine.rb") + engine_lib.dirname.mkpath + engine_lib.write(<<~RUBY) + require "rails/engine" + + class MyEngine < Rails::Engine + end + RUBY + engine_initializer = app.path("engine/config/initializers/one.rb") + engine_initializer.dirname.mkpath + engine_initializer.write("") + + assert_success app.spring_test_command + + engine_initializer.write("raise 'omg'") + + assert_failure app.spring_test_command, stderr: "omg (RuntimeError)" + end end end end