Skip to content

Commit 84f1ff1

Browse files
andrewn617gmcgibbon
andcommitted
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 <[email protected]>
1 parent c5987d5 commit 84f1ff1

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

lib/spring/application.rb

+5-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,11 @@ def preload
123123
watcher.add Spring.gemfile, Spring.gemfile_lock
124124

125125
if defined?(Rails) && Rails.application
126-
watcher.add Rails.application.paths["config/initializers"]
126+
Rails::Engine.descendants.each do |engine|
127+
if engine.root.to_s.start_with?(Rails.root.to_s)
128+
watcher.add engine.paths["config/initializers"]
129+
end
130+
end
127131
watcher.add Rails.application.paths["config/database"]
128132
if secrets_path = Rails.application.paths["config/secrets"]
129133
watcher.add secrets_path

test/support/acceptance_test.rb

+22
Original file line numberDiff line numberDiff line change
@@ -715,6 +715,28 @@ def exec_name
715715
test "rails db:system:change" do
716716
assert_success "bin/rails db:system:change --to=sqlite3"
717717
end
718+
719+
test "watches embedded engine initializers" do
720+
engine_lib = app.path("engine/lib/my_engine.rb")
721+
engine_lib.dirname.mkpath
722+
engine_lib.write(<<~RUBY)
723+
require "rails/engine"
724+
725+
class MyEngine < Rails::Engine
726+
end
727+
RUBY
728+
engine_initializer = app.path("engine/config/initializers/first.rb")
729+
engine_initializer.dirname.mkpath
730+
engine_initializer.write("")
731+
732+
assert_success app.spring_test_command
733+
734+
app.path("engine/config/initializers/second.rb").write("")
735+
736+
app.await_reload
737+
738+
assert_success app.spring_test_command
739+
end
718740
end
719741
end
720742
end

0 commit comments

Comments
 (0)