Почему методы, определенные в инициализаторе, периодически вызывают ошибку "не определено", которая устраняется путем перезапуска сервера?
Я использую PaperTrail 4.1 с Rails 4.2.
Я определил несколько пользовательских методов в инициализаторе (см.: Как добавить метод в модель версий Paper_trail?)
#config/initializers/paper_trail.rb
PaperTrail::Rails::Engine.eager_load!
module PaperTrail
class Version < ActiveRecord::Base
scope :scoped, lambda { #selects some records }
def custom_method
#does some stuff
end
end
end
Время от времени в среде разработки я получаю method not defined error
для методов / областей, определенных в этом инициализаторе.
Перезапуск сервера устраняет проблему.
Почему эти методы "теряются" для Rails?
Это проблема, которая также будет присутствовать в производстве или в других средах?
Какие шаги я могу предпринять, чтобы найти причину этой проблемы?
1 ответ
Для всех, кто прибывает сюда, очевидно, это известная проблема с PaperTrail
С https://github.com/airblade/paper_trail/pull/492
Теперь источник get_trail загружается в среду разработки при сохранении файла, что означает, что класс удаляется из кэша и перестраивается из источников paper_trail. Инициализатор не интерпретируется снова, так как они только один раз, без module_eval, без абстрактного класса -> исключения.
И исправление было включено в последнюю версию драгоценного камня: https://github.com/airblade/paper_trail/pull/557
По сути, больше не рекомендуется использовать инициализатор для добавления пользовательских методов в PaperTrail, а вместо этого использовать модель, которая наследуется от PaperTrail (которая намного лучше подходит для AR).
# app/models/paper_trail/version.rb
module PaperTrail
class Version < ActiveRecord::Base
include PaperTrail::VersionConcern
# my custom methods
end
end