我正在运行一个延迟的任务工作者。每当我调用foo
方法时,工作者会输出hello
。
class User
def foo
puts "Hello"
end
handle_asynchronously :foo
end
如果我对foo
方法进行更改,则必须重新启动工作进程才能反映更改。在开发模式下,这可能会变得非常烦人。
我正在尝试找到一种方法,在每个请求中重新加载负载类(在本例中为User类)。 我尝试使用Monkey Patching 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类重新加载代码的指针吗?