首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Heroku上每2分钟运行一次耙任务的最佳方法

在Heroku上每2分钟运行一次耙任务的最佳方法
EN

Stack Overflow用户
提问于 2018-09-12 22:09:36
回答 1查看 219关注 0票数 0

我有一个rails模块,它处理一些活动记录对象,每次只有15-20个,我需要每两分钟开始一次。

我已经尝试将它卸载到sidekiq (和sidekiq-cron),它可以工作,但是使用并发性,创建了许多争用条件和重复数据。

我真的需要一个简单的rails或sinatra的rake任务cron (因为我会创建一个新的sinatra应用程序来完成这些任务)。

  • 我要么需要强制sidekiq在一个线程中进行处理,要么
  • 让"cron“作业直接运行rake任务甚至模块。 def self.process_events events = StripeEvent.where(processed: false) events = StripeServices.arrange_processing_order events events.each do |event_obj| |event_obj| end

谢谢你在正确的方向上的任何一点。

  • 编辑过的

对不起,我说得不清楚。将我的模块推到sidekiq会导致并发问题,但我还没有准备好(我的代码不是threadsafe),加上Heroku在"crons“上设置的限制,那么每2分钟运行一次rake任务的最佳方式是什么?

如果辛纳屈能做到的话,我宁愿这样做,但我不能为同样的问题找到解决办法。

EN

回答 1

Stack Overflow用户

发布于 2018-09-13 01:30:40

还不清楚你在问什么。您已经尝试了选项1,您可以尝试选项2(创建任务并处理它,这很简单),如果它更好的话,您将比任何人都更清楚。

无论如何,如果一项任务花费超过2分钟,我猜这两种方法都会出现并发问题。

您可以添加额外的标志,以防止两个任务处理同一个ServiceEvent (可能添加一个布尔"processing“,并在任务接收时将其设置为true )。

或者,如果另一个任务已经在运行,您也可以有一个锁文件来阻止它运行(在任务启动时创建一个具有特定位置和名称的文件,并在它完成处理时删除该文件,则可以在启动新任务之前检查该文件是否存在)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52304150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档