diff --git a/lib/spring/application.rb b/lib/spring/application.rb index 6fdbbb3a..92477903 100644 --- a/lib/spring/application.rb +++ b/lib/spring/application.rb @@ -123,7 +123,11 @@ def preload watcher.add Spring.gemfile, Spring.gemfile_lock 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"] + 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..80df8efa 100644 --- a/test/support/acceptance_test.rb +++ b/test/support/acceptance_test.rb @@ -715,6 +715,26 @@ 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 + engine_file = app.path("engine/lib/my_engine.rb") + engine_file.mkpath + engine_file.write(<<~RUBY) + require "rails/engine" + + class MyEngine < Rails::Engine + end + RUBY + app.path("engine/config/initializers/first.rb").write("") + + assert_success app.spring_test_command + + app.path("engine/config/initializers/second.rb").write("") + + app.await_reload + + assert_success app.spring_test_command + end end end end