我有一些使用真实队列服务运行作业的计划任务。
现在,我希望能够从仪表板手动运行这些任务,等待其执行,并在控制器操作中读取/处理其部分输出。典型的情况是管理员想要手动重新加载某些统计信息,并且可以将服务器停顿几秒钟。
有没有办法将ActiveJob适配器更改为“内联”才能执行此操作?如果可能的话,我还想阅读这个工作生成的一些工件(可能是实例变量,或perform
操作的返回值。)
有什么办法吗?
示例作业
class TopLevelJob < ApplicationJob
def perform
some_iterator.each do
SomeNestedJob.rand.perform_later
# There are several types of sub-jobs that can be called
# Passing a flag param (perform vs perform_later) would be kind of annoying
end
end
module SomeNestedJob
class A < ApplicationJob;
def perform
# May in turn spawn an other job with perform_later
end
end
...
class Z < ApplicationJob; ...; end
def self.rand
[A..Z].sample
end
end
答案 0 :(得分:0)
我相信“perform_now”就是您正在寻找的......立即运行任务,而无需排队。
比照Active http://edgeapi.rubyonrails.org/classes/ActiveJob/Base.html
上的ActiveJob除此之外,真的,只需让你的“执行”有一个标志(“has_whatever_output_you_have_in_mind”)并在你的执行动作中使用它来触发输出。