有没有人能够在 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 项目中打开了一个问题。希望他们能尽快修复它。
****** 第二次更新 ********* 我得到了这方面的更新。在 ActiveJob 代码库工作的 Cristianbica 这么说。“到目前为止,我们还没有考虑过重复工作,我们不支持这个,因为没有外部 gem 的适配器都不支持这个。然而,这是一个非常好的功能,但我认为我们无法及时实现4.2. 另外我不确定它是否适合包含在 rails 中”