我有ActiveRecord模型:
User(id,user_specific_attributes, last_check:datetime, check_priority:integer, today_api_calls:integer)
我每天都会为每个User
做一次API调用。 API有一些重要的限制:
我需要每天get_some_data_from_api()
为User
运行一次(凌晨4点开始)。执行顺序由check_priority
列定义。
如果get_some_data_from_api()
出错,则应在6秒后重新启动作业(api限制)。
有没有适合这种情况的宝石?
像Sidekiq,Delayed Job,Resque这样的宝石是不合适的。使用它们我需要在特定时间排队所有作业。考虑一下:
答案 0 :(得分:0)
Delayed job也可以。它具有在特定时间运行的选项,并在作业失败时重新安排。
DJ作为您应用的单独实例运行。您可以为作业分配优先级。执行时间无关紧要。它内置了用于配置失败重试的选项。
要在特定时间安排工作并重新安排工作,我会使用自我延续的工作。所以在工作完成后,它会重新安排自己。像
这样的东西def run_me
///code code
User.delayed_job(:run_at => next_day).run_me
end
您可以用同样的方式处理某些错误。例如,如果超过api限制,您可能希望捕获一些异常并在第二天重新安排,而不是6秒。