2

簡単に実行できるようにするために約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、または少なくともそれを妨げている理由を教えてくれますか?

4

1 に答える 1

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 が作成され、アプリ フォルダーに書き込まれます)。

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役立つ可能性があります

于 2014-01-15T12:06:07.697 に答える