Skip to content

Commit

Permalink
Add embedded engine initializers to spring watcher
Browse files Browse the repository at this point in the history
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]>
  • Loading branch information
andrewn617 and gmcgibbon committed Aug 9, 2024
1 parent c5987d5 commit d5487ca
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 0 deletions.
5 changes: 5 additions & 0 deletions lib/spring/application.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
22 changes: 22 additions & 0 deletions test/support/acceptance_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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/one.rb")
engine_initializer.dirname.mkpath
engine_initializer.write("")

engine_initializer.write("CHANGED = true")

assert_success app.spring_test_command

app.await_reload

assert_success app.spring_test_command
end
end
end
end

0 comments on commit d5487ca

Please sign in to comment.