加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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表>检查锁定状态

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读