【问题标题】:Rails/delayed_job just... not workingRails/delayed_job 只是......不工作
【发布时间】:2013-05-08 02:05:25
【问题描述】:

我花了大约 3 个小时试图让一个简单的 delayed_job 执行但没有成功。我有这个极其简单的工作:

class Foo
  def foo
    `echo foo >> /tmp/mrsmee`
  end
end

我将它加入到 Rails 操作中,如下所示:

Foo.new.delay.foo()

我正在像这样运行作业处理器:

$ script/delayed_job run

我看到一堆这样的输出日志,

2013-05-13T15:21:12-0700: [Worker(delayed_job host:asha.local pid:73263)] 1 jobs processed at 35.6405 j/s, 0 failed ...

delayed_backend_mongoid_jobs 中的条目是这样的,

{ "_id" : ObjectId("51916452005056107900001a"), "priority" : 0, "attempts" : 0, "queue" : null, "handler" : "--- !ruby/object:Delayed::PerformableMethod\nobject: !ruby/object:Foo {}\nmethod_name: :foo\nargs: []\n", "run_at" : ISODate("2013-05-13T22:08:18.560Z"), "updated_at" : ISODate("2013-05-13T22:08:18.560Z"), "created_at" : ISODate("2013-05-13T22:08:18.560Z") }

很明显,作业正在入队、处理和出队。太糟糕了,测试输出文件/tmp/mrsmee 从来没有写入任何东西。我完全不知所措。为什么delayed_job 没有实际运行延迟的作业,或者至少告诉我是什么阻止了它这样做?

【问题讨论】:

  • 我无法回答您的问题,但我在几天内遇到了与延迟工作 gem 类似的问题。最后我选择了 rufus-scheduler,不知道你的要求是否允许。

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


【解决方案1】:

可能有点晚了,但是:

问题不在于 DelayedJob,而在于您的方法。 DelayedJob 正在执行 Foo.new.foo。

如果你试试这个:

class Foo
  def foo
    puts "hey!, the job is being executed!"
  end
end

并且您在 DelayedJob 的输出日志中看到该字符串,然后延迟工作正常工作

您是否检查过 rails (DelayedJob) 有权写入 /tmp 文件夹?

此代码也可能会有所帮助(test.txt 已创建并写入您的应用文件夹):

class Foo
  def foo
    `echo foo >> #{Rails.root.join "test.txt"}` #remember to delete test.txt!
  end
end

如果可行,即创建了 test.txt 文件并且其内容为 foo,则问题应该是权限问题,因此 sudo script/delayed_job run 可能会有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 2014-10-30
    • 2013-03-05
    • 1970-01-01
    • 2012-11-16
    • 2014-02-07
    相关资源
    最近更新 更多