Я работаю с отсрочкой.Когда бы я ни вызывал метод foo
, рабочий печатает hello
.
class User
def foo
puts "Hello"
end
handle_asynchronously :foo
end
Если я внесу некоторые изменения в метод foo
, мне придется перезапустить работника, чтобы изменения отразились.В режиме разработки это может стать довольно утомительным.
Я пытаюсь найти способ перезагрузить класс полезной нагрузки (в данном случае класс пользователя) для каждого запроса.Я попытался обезьянить патч библиотеки DelayedJob для вызова require_dependency
перед вызовом метода полезной нагрузки.
module Delayed::Backend::Base
def payload_object_with_reload
if Rails.env.development? and @payload_object_with_reload.nil?
require_dependency(File.join(Rails.root, "app", "models", "user.rb"))
end
@payload_object_with_reload ||= payload_object_without_reload
end
alias_method_chain :payload_object, :reload
end
Этот подход не работает, так как классы, зарегистрированные с использованием require_dependency
, должны быть перезагружены перед вызовомне понял, как это сделать.Я потратил некоторое время на чтение кода диспетчера, чтобы выяснить, как Rails перезагружает классы для каждого запроса.Я не смог найти код перезагрузки.
Кто-нибудь пробовал это раньше?Как бы вы посоветовали мне продолжить?Или у вас есть указатели для поиска кода перезагрузки класса Rails?