Ruby on rails 如何连续部署长时间运行的作业

Ruby on rails 如何连续部署长时间运行的作业,ruby-on-rails,deployment,background-process,sidekiq,delayed-job,Ruby On Rails,Deployment,Background Process,Sidekiq,Delayed Job,我们目前使用delayed_作业和rails来管理系统中的一些长时间运行的作业。其中一些作业可能需要数小时才能运行,但我们也喜欢相当频繁地部署,通常是一天多次。此设置的问题是,我们必须在部署期间重新启动延迟的_作业,以获取代码更改,以便使用最新代码处理任何新作业 我们得到的解决方案是,对于任何需要运行超过一小段时间的作业,我们分叉延迟的作业,使其立即返回,分叉的进程处理该工作。这样,部署可以重新启动所有延迟的作业进程,而长时间运行的“作业”将继续运行,直到它作为孤立进程完成 我们已经研究了sid

我们目前使用delayed_作业和rails来管理系统中的一些长时间运行的作业。其中一些作业可能需要数小时才能运行,但我们也喜欢相当频繁地部署,通常是一天多次。此设置的问题是,我们必须在部署期间重新启动延迟的_作业,以获取代码更改,以便使用最新代码处理任何新作业

我们得到的解决方案是,对于任何需要运行超过一小段时间的作业,我们分叉延迟的作业,使其立即返回,分叉的进程处理该工作。这样,部署可以重新启动所有延迟的作业进程,而长时间运行的“作业”将继续运行,直到它作为孤立进程完成

我们已经研究了sidekiq,但在尝试部署新代码时,似乎也会遇到同样的问题


是否有人开发了一种解决方案,可以推荐用于处理跨多个部署的长时间运行的后台进程?

Sidekiq的诀窍是将工作拆分为许多较小的作业,并并行处理它们。如果您的工作需要很多小时,那么最好将其建模为一个长时间运行的rake任务,该任务在完成时退出并忽略部署。谢谢Mike。关于延迟作业,我喜欢的一点是它能够序列化对象,以便稍后运行方法。我们已经使用rails runner从命令行为长时间运行的报告和rake生成了一个新进程,但这依赖于构建一个并不总是实用的命令行字符串。当然,序列化数据也是一个“缓存”,它可能会过时,特别是当您在数小时或数天内重试作业时。这就是为什么Sidekiq要求像DB ID这样的简单数据类型。