Skip to content

Commit b06ccef

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 b06ccef

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

lib/spring/application.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,11 @@ def preload
124124

125125
if defined?(Rails) && Rails.application
126126
watcher.add Rails.application.paths["config/initializers"]
127+
Rails::Engine.descendants.each do |engine|
128+
if engine.root.to_s.start_with?(Rails.root.to_s)
129+
watcher.add engine.paths["config/initializers"].expanded
130+
end
131+
end
127132
watcher.add Rails.application.paths["config/database"]
128133
if secrets_path = Rails.application.paths["config/secrets"]
129134
watcher.add secrets_path

test/support/acceptance_test.rb

Lines changed: 22 additions & 0 deletions
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/one.rb")
729+
engine_initializer.dirname.mkpath
730+
engine_initializer.write("")
731+
732+
assert_success app.spring_test_command
733+
734+
engine_initializer.write("CHANGED = true")
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)