From 29bfad7a0d8f7104731b251157dacd299888e7ff Mon Sep 17 00:00:00 2001 From: Andrew Novoselac Date: Thu, 25 Jul 2024 12:55:39 -0400 Subject: [PATCH] Add embedded engine initializers to spring watcher This will allow embedded engine initializers to reload the application when changed. Previously, the server would have to be reloaded manually. Co-Authored-By: Gannon McGibbon --- lib/spring/application.rb | 5 +++++ test/support/acceptance_test.rb | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) 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..aba5c3d7 100644 --- a/test/support/acceptance_test.rb +++ b/test/support/acceptance_test.rb @@ -715,6 +715,28 @@ 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_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/first.rb") + engine_initializer.dirname.mkpath + engine_initializer.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