From 3dbbbb3d2ff65cc89bf0ba040a2c4a198104c15b 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 | 6 +++++- test/support/acceptance_test.rb | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) 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..693cfc3b 100644 --- a/test/support/acceptance_test.rb +++ b/test/support/acceptance_test.rb @@ -715,6 +715,24 @@ 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 + File.write(app.path("engine/lib/my_engine.rb"), <<~RUBY) + require "rails/engine" + + class MyEngine < Rails::Engine + end + RUBY + File.write(app.path("engine/config/initializers/first.rb"), "") + + assert_success app.spring_test_command + + File.write(app.path("engine/config/initializers/second.rb"), "") + + app.await_reload + + assert_success app.spring_test_command + end end end end