Ruby on rails Rails延迟\u作业在runnin上卡住

Ruby on rails Rails延迟\u作业在runnin上卡住,ruby-on-rails,Ruby On Rails,我尝试在rails上使用一个非常基本的延迟作业: class ImportJob < Struct.new(:job_params) def perform #blank perform end end 此外,如果我从rails控制台运行job worker,我会看到作业被“锁定”,然后立即被删除: 2.1.2 :001 > work = Delayed::Worker.new => #<Delayed::Worker:0x007f8

我尝试在rails上使用一个非常基本的延迟作业:

class ImportJob < Struct.new(:job_params)


    def perform
        #blank perform
    end
end
此外,如果我从rails控制台运行job worker,我会看到作业被“锁定”,然后立即被删除:

2.1.2 :001 > work = Delayed::Worker.new
=> #<Delayed::Worker:0x007f8a8c4d2ee8 @quiet=true, @failed_reserve_count=0> 
2.1.2 :002 > work.start
Delayed::Backend::ActiveRecord::Job Load (1.8ms)  SELECT "delayed_jobs".* FROM "delayed_jobs" WHERE ((run_at <= '2014-07-16 19:10:54.367527' AND (locked_at IS NULL OR locked_at < '2014-07-16 15:10:54.367862') OR locked_by = 'host:jerrods-mbp.raleigh.ibm.com pid:36564') AND failed_at IS NULL) ORDER BY priority ASC, run_at ASC LIMIT 5
Delayed::Backend::ActiveRecord::Job Load (3.5ms)  SELECT "delayed_jobs".* FROM "delayed_jobs" WHERE ((run_at <= '2014-07-16 19:10:59.386290' AND (locked_at IS NULL OR locked_at < '2014-07-16 15:10:59.386563') OR locked_by = 'host:jerrods-mbp.raleigh.ibm.com pid:36564') AND failed_at IS NULL) ORDER BY priority ASC, run_at ASC LIMIT 5
SQL (5.9ms)  UPDATE "delayed_jobs" SET "locked_at" = '2014-07-16 19:10:59.387743', "locked_by" = 'host:jerrods-mbp.raleigh.ibm.com pid:36564' WHERE "delayed_jobs"."id" IN (SELECT "delayed_jobs"."id" FROM "delayed_jobs" WHERE "delayed_jobs"."id" = 6 AND ((run_at <= '2014-07-16 19:10:59.386290' AND (locked_at IS NULL OR locked_at < '2014-07-16 15:10:59.386563') OR locked_by = 'host:jerrods-mbp.raleigh.ibm.com pid:36564') AND failed_at IS NULL) ORDER BY priority ASC, run_at ASC)
Delayed::Backend::ActiveRecord::Job Load (0.7ms)  SELECT "delayed_jobs".* FROM "delayed_jobs" WHERE "delayed_jobs"."id" = ? LIMIT 1  [["id", 6]]
(0.1ms)  begin transaction
SQL (0.5ms)  DELETE FROM "delayed_jobs" WHERE "delayed_jobs"."id" = ?  [["id", 6]]
(2.6ms)  commit transaction

以前有人见过这种行为吗?

我在这里没有看到任何异常。当作业成功完成时,它将从延迟作业队列/数据库表中删除。您可以让您的作业引发一个错误,并查看当一个作业未成功完成时会发生什么:

def perform
   raise "BOOM, goes the dynamite!"
end

但是,它应该输出在任何给定运行期间成功完成的作业数。请参阅来源。

我在这里没有看到任何异常。当作业成功完成时,它将从延迟作业队列/数据库表中删除。您可以让您的作业引发一个错误,并查看当一个作业未成功完成时会发生什么:

def perform
   raise "BOOM, goes the dynamite!"
end

但是,它应该输出在任何给定运行期间成功完成的作业数。请参阅源代码。

好的,在阅读了这里和其他地方的各种其他线程后,我得到了以下解决方案:

我意识到无论出于什么原因,它都在默默地失败,所以我添加了Delayed::Worker.destroy\u failed\u jobs=false config/application.rb

添加了这一行之后,我能够进入控制台并得到延迟::Job.last.last_错误,它告诉我,由于任何原因,我的作业文件没有加载到rake中

为了解决这个问题,我在initlializers中创建了一个custom.rb,并添加了以下行: 需要“我的课程”


希望这将帮助其他人

好吧,在阅读了这里和其他地方的各种其他线程后,我得到了以下解决方案:

我意识到无论出于什么原因,它都在默默地失败,所以我添加了Delayed::Worker.destroy\u failed\u jobs=false config/application.rb

添加了这一行之后,我能够进入控制台并得到延迟::Job.last.last_错误,它告诉我,由于任何原因,我的作业文件没有加载到rake中

为了解决这个问题,我在initlializers中创建了一个custom.rb,并添加了以下行: 需要“我的课程”


希望这将有助于其他人

同样的结果,我认为作业实际上根本没有运行。因此,我设置了属性Delayed::Worker.destroy\u failed\u jobs=true,现在我可以看到延迟作业上的错误。其内容如下:加载作业失败:未定义的类/模块导入作业。处理程序:\-!ruby/struct:ImportJob\\n作业参数:\\n\\n。。。。我的类是lib文件夹中的ImportJob。应该在其他地方吗?同样的结果,我认为作业实际上根本没有运行。因此我设置了属性Delayed::Worker.destroy\u failed\u jobs=true,现在我可以看到延迟作业上的错误。其内容如下:加载作业失败:未定义的类/模块导入作业。处理程序:\-!ruby/struct:ImportJob\\n作业参数:\\n\\n。。。。我的类是lib文件夹中的ImportJob。应该在别的地方吗?