gpt4 book ai didi

ruby-on-rails - 为什么延迟作业进程不会排队作业?

转载 作者:行者123 更新时间:2023-12-04 19:04:58 25 4
gpt4 key购买 nike

我已经尽可能地精简了我的例子。在我的应用程序中,我创建了一个虚拟类并尝试将调用方法加入队列。这会被很好地添加到数据库中,并且在后台运行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::PerformableMethod\nobject: !ruby/class \'DummyClass\'\nmethod_name: :call\nargs: []\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::PerformableMethod\nobject: !ruby/class 'DummyClass'\nmethod_name: :call\nargs: []\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, 19 Dec 2014 14:11:40 CAT +02:00,
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 表中查找。当我跑 bin/delayed_job run记录已锁定但未处理。

下面是锁定记录的图像
Locked record in database

最佳答案

我对 Sidekiq 更熟悉,但我认为问题在于您正在定义一个在 rails 控制台中运行的类,而工作人员则在一个单独的进程中运行。工作人员不知道 DummyClass 并且无法执行作业。我建议:

  • 使这个类成为 Rails 模型(Dummy 等)
  • 重启延迟作业
  • 将记录插入到delayed_job 表
  • 检查锁定状态
  • 关于ruby-on-rails - 为什么延迟作业进程不会排队作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27564567/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com