在后台运行rake任务与使用像Delayed Job,Resque或Sidekiq这样的gem之间的区别是什么?

时间:2014-07-07 05:33:24

标签: rake background-process delayed-job resque sidekiq

我需要实现一些后台处理,1)发送电子邮件,2)做一些API调用。而且,无论我使用什么系统,我还将与某种cron调度程序(只要有可能)结合使用。我很好奇,我认识到有一系列非常酷的后台处理宝石(延迟工作,Sidekiq,Resque),但我也明白你可以根据Ryan Bate的视频只用rake任务进行后台处理:{{3} }。

使用gem和rake任务进行后台处理有什么利弊?后者关于我的一件事是你必须每次都要开辟一个新的环境调用rake任务,这在内存上非常昂贵。

请注意,我不需要比较宝石。这个系列在这里做得很好: http://railscasts.com/episodes/127-rake-in-background

3 个答案:

答案 0 :(得分:5)

并行。您可以让N名工作人员并行发送电子邮件。使用rake你有一个单独的线程,发送许多电子邮件将需要一段时间。

答案 1 :(得分:2)

对我而言,另一个巨大的差异就是背景中的rake任务使用相同的Heroku dyno,但是其他附加组件要求你有一个单独的工作dyno。

编辑,如果有人在谷歌搜索,只是了解到在Sidekiq你可以使用相同的工作人员dyno,请参阅本教程:https://coderwall.com/p/fprnhg

答案 2 :(得分:1)

另一个很大的不同可能是像sidekiq这样的宝石可以让你处理后台工作的工具。

例如,如果您需要处理预定的后台作业,比如每天读取多个CSV文件,您可能需要处理或至少查看该处理的结果,读取指标,在发生故障时重试,等等 我想你必须自己用rake任务写出来。

在我的情况下(我在这里使用谷歌搜索),我需要一个非常简单而且不那么繁重的任务来完成预定和异步,所以我要执行rake任务并且我自己保存完成安装,配置和维护像sidekiq这样的gem(很容易),它依赖于服务器。