Rails delayed_job - 在状态运行时从表中删除延迟的作业,但从未完成/执行

时间:2014-07-26 19:09:18

标签: ruby-on-rails ruby-on-rails-3 delayed-job

我正在使用delayed_job来安排发布到Facebook的开放图表的任务,以避免在动作完成后内容没有为Facebook的刮刀做好准备的问题。 (刮刀得到了错误" og:输入"内容,因为它尚未缓存在Facebook的一侧)

据我所知,我已正确设置此工作流程的各个部分。但是,当作业排队时,我可以从服务器日志中看到它已插入delayed_jobs表中。当我在控制台查询delayed_job时,它不存在(实际上不存在,它们总是被删除)。检查delayed_job.log时,我可以看到作业已被记录为状态RUNNING,然后再也没有进一步报告,通过检查Facebook,作业似乎没有被执行。以前我收到Facebook的错误,表示操作失败,将作业设置为FAILED状态。由于情况不再如此,我相信行动本身已得到修复。

服务器日志中的报告也不稳定,因为有时我会看到delayed_job的日志被删除,但有时会在服务器日志中删除而没有跟踪。

我无法确定在哪里进行故障排除或在何处验证操作是否正在执行。以下相关代码,请询问任何有用的附加代码。

方法获得Facebook错误时

delayed_job.log输出

Job JobScheduler::FacebookListCreation (id=2) FAILED (7 prior attempts) with NoMethodError: undefined method `list_url'
重新创建修复Facebook错误的方法

delayed_job.log输出

Job JobScheduler::PublishFBListCreation (id=15) RUNNING
来自呼叫控制器的

if current_user.facebook_id && current_user.facebook_access_token
  Delayed::Job.enqueue JobScheduler::PublishFBListCreation.new(list_url(@list), current_user.facebook_access_token), 0, 1.minutes.from_now
end

job_scheduler.rb

class PublishFBListCreation < Struct.new(:full_list_url, :facebook_access_token)
  def perform
    @app = FbGraph::Application.new(ENV['FACEBOOK_APP_ID'], :secret => ENV['FACEBOOK_APP_SECRET'])
    @fb_user = FbGraph::User.me(facebook_access_token)

    action = @fb_user.og_action!(
           @app.og_action(:create), :list => full_list_url)
    end
  end

2 个答案:

答案 0 :(得分:0)

我没有得到您的实际问题,但您的错误之一是未定义的方法`list_url&#39; &#34;是因为它属于你的通话类而且延迟工作并不知道。你可以像这样解决它:

if current_user.facebook_id && current_user.facebook_access_token
  url = list_url(@list)
  access_token = current_user.facebook_access_token
  Delayed::Job.enqueue JobScheduler::PublishFBListCreation.new(url, access_token), 0, 1.minutes.from_now
end

答案 1 :(得分:0)

我遇到了同样的问题,并意识到我遇到了一个常见问题:https://github.com/collectiveidea/delayed_job/wiki/Common-problems