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 <gannon.mcgibbon@gmail.com>
  • Loading branch information
andrewn617 and gmcgibbon committed Aug 9, 2024
1 parent c5987d5 commit 6fc5c12
Show file tree
Hide file tree
Showing 2 changed files with 25 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
20 changes: 20 additions & 0 deletions test/support/acceptance_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -715,6 +715,26 @@ 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("")

assert_success app.spring_test_command

engine_initializer.write("raise 'omg'")

assert_failure app.spring_test_command, stdout: "RuntimeError: omg"
end
end
end
end

0 comments on commit 6fc5c12

Please sign in to comment.