ruby-on-rails – 延迟作业:如何在开发模式下的每个通话期间重
发布时间:2020-12-16 20:09:47 所属栏目:百科 来源:网络整理
导读:我正在延迟工作.当我调用foo方法时,工作人员打印出你好. class User def foo puts "Hello" end handle_asynchronously :fooend 如果我对foo方法进行了一些更改,我必须重新启动这个工作来进行更改以反映出来.在开发模式下,这可能变得相当麻烦. 我正在尝试为每
我正在延迟工作.当我调用foo方法时,工作人员打印出你好.
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类的重载代码? 解决方法
我设法找到一个解决方案.我使用ActiveSupport :: Dependencies.clear方法来清除加载的类.
添加一个名为config / initializers / delayed_job.rb的文件 Delayed::Worker.backend = :active_record if Rails.env.development? module Delayed::Backend::Base def payload_object_with_reload if @payload_object_with_reload.nil? ActiveSupport::Dependencies.clear end @payload_object_with_reload ||= payload_object_without_reload end alias_method_chain :payload_object,:reload end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |