ruby-on-rails – 为什么不延迟工作流程排队工作?
发布时间:2020-12-17 03:17:48 所属栏目:百科 来源:网络整理
导读:我尽可能地剥夺了我的榜样.在我的应用程序中,我创建了一个虚拟类,并尝试将调用方法排入队列.这会被添加到数据库中,并且在后台运行delayed_jobs,它会将其选中并将其更新为锁定状态.但它实际上并没有完成这项工作.它只是处于锁定状态. pry(main) class DummyCl
我尽可能地剥夺了我的榜样.在我的应用程序中,我创建了一个虚拟类,并尝试将调用方法排入队列.这会被添加到数据库中,并且在后台运行delayed_jobs,它会将其选中并将其更新为锁定状态.但它实际上并没有完成这项工作.它只是处于锁定状态.
pry(main)> class DummyClass pry(main)* def self.call pry(main)* puts 'will this ever work?' pry(main)* end pry(main)* end => :call pry(main)> DummyClass.delay.call (0.2ms) BEGIN SQL (0.3ms) INSERT INTO `delayed_jobs` (`created_at`,`handler`,`queue`,`run_at`,`updated_at`) VALUES ('2014-12-19 12:11:40.006107','--- !ruby/object:Delayed::PerformableMethodnobject: !ruby/class 'DummyClass'nmethod_name: :callnargs: []n','default','2014-12-19 12:11:40.005811','2014-12-19 12:11:40.006107') (16.2ms) COMMIT => #<Delayed::Backend::ActiveRecord::Job:0x007fd0fdec0e20 id: 22,priority: 0,attempts: 0,handler: "--- !ruby/object:Delayed::PerformableMethodnobject: !ruby/class 'DummyClass'nmethod_name: :callnargs: []n",last_error: nil,run_at: Fri,19 Dec 2014 14:11:40 CAT +02:00,locked_at: nil,failed_at: nil,locked_by: nil,queue: "default",created_at: Fri,updated_at: Fri,19 Dec 2014 14:11:40 CAT +02:00> 在这里锁定任务 SQL (0.8ms) UPDATE `delayed_jobs` SET `delayed_jobs`.`locked_at` = '2014-12-19 12:17:20.031925',`delayed_jobs`.`locked_by` = 'delayed_job host:Ryan-Mes-MacBook-Pro-2.local pid:60080' WHERE ((run_at <= '2014-12-19 12:17:20.031003' AND (locked_at IS NULL OR locked_at < '2014-12-19 12:12:20.031154') OR locked_by = 'delayed_job host:Ryan-Mes-MacBook-Pro-2.local pid:60080') AND failed_at IS NULL) ORDER BY priority ASC,run_at ASC LIMIT 1 然后它就挂了.我不明白为什么这么简单的任务不起作用. 请注意,此pry控制台正在我现有的rails应用程序上运行.它可能是一个应用程序配置问题,但我一直无法找到它. 有任何想法吗?我可以尝试提供更多信息,但我认为这就是一切. 我正在使用的实际代码如下 module Events class ForwardRequestToPulse def self.call puts 'will this ever work' end end end class MyTestController < ApplicationController def index Events::ForwardRequestToPulse.delay.call end end 该记录被添加到delayed_jobs表find中.当我运行bin / delayed_job运行时,记录被锁定但未被处理. 下面是锁定记录的图像 解决方法
我对Sidekiq更熟悉,但我认为问题在于你定义了一个在rails控制台中运行的类,而工作者是在一个单独的进程中运行的.工作人员不知道DummyClass并且无法执行该作业.我建议:
>使这个类成为Rails模型(Dummy等)>重新启动延迟作业>将记录插入delayed_job表>检查锁定状态 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |