我在Rails 5
上使用Heroku
用于非常精简的付款处理应用,该应用将进行大量处理。
该应用程序没有太多功能,这就是它在那里托管的原因。但是,它需要100%可靠地完成一件事就是运行支付处理工作,并且只运行一次特定的工作。如果不是100%(因为没有什么是完美的),而不是99.9999%。
我选择了Delayed Job
而不是Sidekiq
来获得额外的数据库完整性。我还计划使用Clockwork
gem。
在阅读问题之后,似乎在dynos重启时,时钟进程被运行了很多次。
我想知道使用Rails
/ Heroku
解决此问题的最佳方法是什么。尽管重启和其他任何事情,我怎么能非常非常可靠地运行某些工作呢?
另外,我忘了提到一些工作可以多次重新运行。这些工作很可能是那些每天或每天都要运行的工作。我真的不关心他们。
我也在谈论Rails行动中的作业计划(那些将是关键行动)。是web
dyno重启是否有可能阻止延迟作业从我的代码中调度作业,如果它重新启动中间动作?
答案 0 :(得分:1)
使用状态机。您在创建作业时将作业状态设置为:pending
。当作业开始运行时,将状态更改为:running
。作业完成后,将状态更改为:complete
。仅在处于:pending
状态时启动作业,并且具有单独的批处理器,以检查已达到超时的:running
作业。这样,当作业在完成之前被杀死时,你可以重新启动它们。