фильтр, определенный в контроллере приложения, не найден в дочернем контроллере в рельсах 6
Я работаю сrails 6.0.2
и используя zeitwerk
.
В моем контроллере приложения я определяю фильтр под названием set_locale
который я использую в ряде дочерних контроллеров. Например;
# app/controllers/application_controller
class ApplicationController < ActionController::Base
def set_locale
...
end
end
Затем в другом контроллере у меня
# app/controllers/clubs_controller
class ClubsController < ApplicationController
before_action :set_locale
end
Эта схема работает в рельсах 5 и работает в рельсах 6 в test
а также production
среды. Вdevelopment
режим, код работает, пока я не внесу изменения в код в clubs_controller
. Когда я перезагружаю страницу, я вижу следующее исключение:
NoMethodError - undefined method `set_locale' for #<ClubsController:0x00007fd9ed227ad0>
Did you mean? set_club_cookie:
Если я добавлю Rails.autoloaders.log!
к config/application.rb
, то когда я запускаю сервер, я вижу следующие две записи
Zeitwerk@rails.main: autoload set for ApplicationController, to be loaded from /Users/Chris/Sites/some_app/app/controllers/application_controller.rb
а потом
Zeitwerk@rails.main: constant ApplicationController loaded from file /Users/Chris/Sites/some_app/app/controllers/application_controller.rb
Started GET "/clubs/index"
как и ожидалось. Но когда я вношу изменения и перезагружаю страницу, я вижу
Zeitwerk@rails.main: ApplicationController unloaded
тогда позже
Zeitwerk@rails.main: autoload set for ApplicationController, to be loaded from /Users/Chris/Sites/some_app/app/controllers/application_controller.rb
что выглядит обнадеживающим, но затем, наконец,
Zeitwerk@rails.main: constant ClubsController loaded from file /Users/Chris/Sites/some_app/app/controllers/clubs_controller.rb
Processing by ClubsController#carry_distances as HTML
Related errors to 'undefined method `set_locale' for
то есть никаких признаков ApplicationController
перезагружается.
Если я перезапущу сервер, он снова заработает правильно. Как это исправить?