Rails / delayed_job只是...不工作

时间:2013-05-13 22:31:14

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

我花了大约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实际上没有运行延迟的工作,或者至少告诉我是什么让它不这样做?

1 个答案:

答案 0 :(得分:0)

可能有点晚了但是:

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

如果您尝试这样做:

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

你在DelayedJob的输出日志中看到该字符串,然后delayedJob正常工作

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

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

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可能有帮助