我经常有一些代码需要按计划或作为后台进程运行,带有一些参数。共同点是它们在调度过程之外运行,但需要访问Rails环境(可能还要访问传递的参数)。
如何有效组织这些代码,并解释原因?如果您喜欢使用特定的插件或gem,请解释您为什么认为它方便-不要只列出您使用的插件。
我经常有一些代码需要按计划或作为后台进程运行,带有一些参数。共同点是它们在调度过程之外运行,但需要访问Rails环境(可能还要访问传递的参数)。
如何有效组织这些代码,并解释原因?如果您喜欢使用特定的插件或gem,请解释您为什么认为它方便-不要只列出您使用的插件。
delayed_job
和background_job
这样的宝石,它们为运行异步作业而持久化到数据库。 对我来说,这似乎很肮脏。 短暂的东西不属于数据库。我目前正在构建一个严重依赖异步处理的Web应用程序,我必须说,我非常非常高兴我决定不使用Rails。
对我来说,不想维护大量额外的基础设施是一个关键优先级,因此我使用了在Rails之外运行的基于数据库的队列。
在我的情况下,我使用了background_job
和delayed_job。使用background_job
时,工作进程通过cron保持运行,因此没有守护程序管理。而在使用delayed_job
时,我正在使用Heroku并让他们担心这个问题。
使用delayed_job,您可以传递尽可能多的参数,以便您的后台工作者运行。
Delayed::Job.enqueue(MyJob.new(param[:one], param[:two], param[:three])
script/runner
(我更喜欢使用script/runner
而不是Rake任务,因为我发现测试代码更容易)。