Rails 4.2 でスケジュールされたジョブを動作させることができた人はいますか?
私は resque を使用しており、resque-scheduler を使用してジョブをスケジュールしようとしています。ロードされてスケジューラが実行されるスケジュールがあり、ジョブを実行しているように見えますが、何もしません。
resque-scheduler: [INFO] 2014-09-16T01:54:25-07:00: Starting
resque-scheduler: [INFO] 2014-09-16T01:54:25-07:00: Loading Schedule
resque-scheduler: [INFO] 2014-09-16T01:54:25-07:00: Scheduling friends
resque-scheduler: [INFO] 2014-09-16T01:54:25-07:00: Schedules Loaded
resque-scheduler: [INFO] 2014-09-16T01:54:55-07:00: queueing FriendsJob (friends)
このようなジョブをキューに入れることができ、それらは処理されます。
TestJob.enqueue(params[:id])
そして、この出力をワーカーログに取得します
got: (Job{default} | ActiveJob::QueueAdapters::ResqueAdapter::JobWrapper | ["TestJob", "98732ce5-17f7-4da3-9a03-a5d2f8f74e84", "8"])
** [01:24:01 2014-09-16] 54841: resque-1.25.2: Processing default since 1410855841 [ActiveJob::QueueAdapters::ResqueAdapter::JobWrapper]
** [01:24:01 2014-09-16] 54841: Running before_fork hooks with [(Job{default} | ActiveJob::QueueAdapters::ResqueAdapter::JobWrapper | ["TestJob", "98732ce5-17f7-4da3-9a03-a5d2f8f74e84", "8"])]
** [01:24:01 2014-09-16] 54841: resque-1.25.2: Forked 54882 at 1410855841
** [01:24:01 2014-09-16] 54882: Running after_fork hooks with [(Job{default} | ActiveJob::QueueAdapters::ResqueAdapter::JobWrapper | ["TestJob", "98732ce5-17f7-4da3-9a03-a5d2f8f74e84", "8"])]
Hello World!!
** [01:24:01 2014-09-16] 54882: done: (Job{default} | ActiveJob::QueueAdapters::ResqueAdapter::JobWrapper | ["TestJob", "98732ce5-17f7-4da3-9a03-a5d2f8f74e84", "8"])
しかし、ジョブをスケジュールしようとすると、エンキューされているように見えますが、何もしていません。
これがschedule.ymlです
friends:
every: "30s"
queue: "friends"
class: "FriendsJob"
args: 8
description: "Friends jobs scheduler"
スケジュールされたジョブからの出力は次のとおりです。
** [01:23:36 2014-09-16] 54841: got: (Job{friends} | FriendsJob | [8])
** [01:23:36 2014-09-16] 54841: resque-1.25.2: Processing friends since 1410855816 [FriendsJob]
** [01:23:36 2014-09-16] 54841: Running before_fork hooks with [(Job{friends} | FriendsJob | [8])]
** [01:23:36 2014-09-16] 54841: resque-1.25.2: Forked 54880 at 1410855816
** [01:23:36 2014-09-16] 54880: Running after_fork hooks with [(Job{friends} | FriendsJob | [8])]
** [01:23:36 2014-09-16] 54880: done: (Job{friends} | FriendsJob | [8])
このhttp://dev.mikamai.com/post/96343027199/rails-4-2-new-gems-active-job-and-global-id を読んだ後、ActiveJob と GlobalId に関係があるのではないかと疑っています。
エンキューされた違いを見てください
** [01:24:01 2014-09-16] 54841: Running before_fork hooks with [(Job{default} | ActiveJob::QueueAdapters::ResqueAdapter::JobWrapper | ["TestJob", "98732ce5-17f7-4da3-9a03-a5d2f8f74e84", "8"])]
対予定
** [01:23:36 2014-09-16] 54841: Running before_fork hooks with [(Job{friends} | FriendsJob | [8])]
ジョブ自体は次の方法で生成されました
rails g job <JobName>
それらは次のようになります。
class TestJob < ActiveJob::Base
queue_as :default
def perform(friend_id)
friend = Friend.find(friend_id)
name = friend.name.swapcase
puts "Hello World!!"
end
end
class FriendsJob < ActiveJob::Base
queue_as :friends
def perform(friend_id)
friend = Friend.find(friend_id)
name = friend.name.swapcase
puts "Hello World!!"
end
end
これに関するヘルプは大歓迎です。事前に感謝します。
********* アップデート *********
action_job railtie を削除し、Resque と Resque-Scheduler のみを使用しており、スケジュールされたジョブは現在機能しています。したがって、これは ActionJob/GlobalId に関連しているようです。Rails プロジェクトでイシューをオープンしました。うまくいけば、彼らはすぐにそれを修正します。
****** 2 回目の更新 ********* これに関する最新情報を入手しました。ActiveJob コードベースで働く Cristianbica 氏は、次のように述べています。「これまでのところ、定期的なジョブについては考えていませんでした。これをサポートしていないのは、外部の gem なしでこれをサポートしているアダプターがないためです。しかし、これは非常に優れた機能ですが、ジョブに間に合うとは思えません。 4.2. また、レールに含めるのに適しているかどうかもわかりません"