Tôi đã viết công cụ tùy chỉnh trong ứng dụng Rails của mình. Tôi kích hoạt nó trong config/initializers/instrumentation.rb
tập tin như thế này:Rails tải lại các lớp học và 'đã được loại bỏ khỏi cây mô-đun nhưng vẫn hoạt động!' ArgumentError
ActiveSupport.on_load(:action_controller) do
include FooBar::ControllerRuntime
end
Nhưng điều này dẫn tôi đến sai sót A copy of FooBar::ControllerRuntime has been removed from the module tree but is still active!
. Tôi hình dung nó ra mà tôi có thể giải quyết nó theo hai cách:
- Thêm đường dẫn nơi có thể 'foobar :: ControllerRuntime
is defined to
config.autoload_one_paths` - Xác định
:to_prepare
callback trongActionController::Railtie
giải pháp ngoại hình thứ hai như thế này:
config.to_prepare do
ActionController.include FooBar::ControllerRuntime
end
Giới thiệu dài này dẫn đến câu hỏi: cách nào tốt hơn? Lần đầu tiên tôi vô hiệu hóa việc nạp lại các lớp nằm trong cùng một đường dẫn như FooBar::ControllerRuntime
của tôi. Với thứ hai tôi không cảm thấy nó là tốt để messup với ActionController::Railtie
. Phải biết ActionController::Railtie
không có định nghĩa to_prepare
nhưng những gì happend nếu trong phiên bản tiếp theo nó sẽ có?