我有一些方法适用于第三方应用的API。按钮点击执行此操作没有问题,但它应该是永久性过程。
如何运行它们的背景?以及如何暂停循环以使其他工作使用相同的API并在作业完成后恢复循环。
现在我读到了ActiveJob,但它只有时间依赖...
更新
我尝试使用whenever
和sidekiq
进行任务运行,但它什么也没做。在哪里查找我无法理解的日志。
**schedule.rb**
every 1.minute do
runner "UpdateWorker.perform_async"
end
**update_worker.rb**
class UpdateWorker
include Sidekiq::Worker
include CommonMods
def perform
logger.info "Things are happening."
logger.debug "Here's some info: #{hash.inspect}"
myMethod
end
def myMethod
....
....
....
end
end
这不是我需要的,但更好的是什么。有人可以用例子解释我吗?
更新2 使用代码进行操作后,必须重新启动 sidekiq 。这个问题解决了,但我不确定这是最好的方法。
答案 0 :(得分:0)
有几个图书馆可以定期安排工作。例如,您可以使用sidekiq-cron每分钟运行一次作业。
如果要暂停一段时间,可以在某处设置一个标志(Redis / database / file),并在检测到时暂停执行。
在某种程度上相关的说明:不要使用sidetiq。这真的很棒,但它不再维护,并且与当前的Sidekiq版本不兼容。
答案 1 :(得分:0)
在检查一些表明它应该的标志之后,在作业完成后,在ensure
部分中排队下一次执行。
另外我建议在那里添加一些延迟,这样你就不会在作业中的某些错误上结束死循环
答案 2 :(得分:0)
您可以定义一个排队的作业:
nan
答案 3 :(得分:0)
我不知道ActiveJobs,但我可以推荐whenever gem来创建cron(定期背景)作业。基本上你最终写了rake
个任务。像这样:
desc 'send digest email'
task send_digest_email: :environment do
# ... set options if any
UserMailer.digest_email_update(options).deliver!
end
我从未向自己添加过rake任务,但是为了重复处理你可以这样做(从这个特定问题的答案)
Rake::Task["send_digest_email"].execute