提交 17a0b733 编写于 作者: R Rafael Mendonça França

Merge pull request #12859 from jetthoughts/track_initializers_loading

Track initializer's loaded event per file
......@@ -396,6 +396,15 @@ INFO. Cache stores my add their own keys
}
```
Railties
--------
### load_config_initializer.railties
| Key | Value |
| -------------- | ----------------------------------------------------- |
| `:initializer` | Path to loaded initializer from `config/initializers` |
Rails
-----
......
* Instrument an `load_config_initializer.railties` event on each load of configuration initializer
from `config/initializers`. Subscribers should be attached before `load_config_initializers`
initializer completed.
Registering subscriber examples:
# config/application.rb
module RailsApp
class Application < Rails::Application
ActiveSupport::Notifications.subscribe('load_config_initializer.railties') do |*args|
event = ActiveSupport::Notifications::Event.new(*args)
puts "Loaded initializer #{event.payload[:initializer]} (#{event.duration}ms)"
end
end
end
# my_engine/lib/my_engine/engine.rb
module MyEngine
class Engine < ::Rails::Engine
config.before_initialize do
ActiveSupport::Notifications.subscribe('load_config_initializer.railties') do |*args|
event = ActiveSupport::Notifications::Event.new(*args)
puts "Loaded initializer #{event.payload[:initializer]} (#{event.duration}ms)"
end
end
end
end
*Paul Nikitochkin*
* Support for Pathnames in eager load paths.
*Mike Pack*
......
......@@ -611,7 +611,7 @@ def load_seed
initializer :load_config_initializers do
config.paths["config/initializers"].existent.sort.each do |initializer|
load(initializer)
load_config_initializer(initializer)
end
end
......@@ -645,6 +645,12 @@ def routes? #:nodoc:
protected
def load_config_initializer(initializer)
ActiveSupport::Notifications.instrument('load_config_initializer.railties', initializer: initializer) do
load(initializer)
end
end
def run_tasks_blocks(*) #:nodoc:
super
paths["lib/tasks"].existent.sort.each { |ext| load(ext) }
......
......@@ -39,5 +39,18 @@ def wait
assert_equal 1, logger.logged(:debug).size
assert_match(/SHOW tables/, logger.logged(:debug).last)
end
test 'rails load_config_initializer event is instrumented' do
app_file 'config/initializers/foo.rb', ''
events = []
callback = -> (*_) { events << _ }
ActiveSupport::Notifications.subscribed(callback, 'load_config_initializer.railties') do
app
end
assert_equal %w[load_config_initializer.railties], events.map(&:first)
assert_includes events.first.last[:initializer], 'config/initializers/foo.rb'
end
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册