4

我有一个可以从延迟作业和一些后台处理中受益的应用程序。问题是,我真的不需要/想要延迟工作的工作人员一直在运行。

该应用程序在共享托管环境和多个位置(针对不同用户)中运行。另外,该应用程序的使用量并不大。

有没有办法仅在某些操作/事件之后从我的应用程序开始和停止处理作业(使用脚本或 rake 任务)?

4

4 回答 4

5

您可以调用系统:

system "cd #{Rails.root} && rake delayed_job:start RAILS_ENV=production"

您也可以更改 delay_job 以减少检查频率。代替默认的 5 秒,将其设置为 15 分钟或其他时间。

于 2009-11-12T21:23:15.617 回答
0

是的,你可以,但我不确定会有什么好处。你说你不希望工人一直在运行——你有什么顾虑?内存使用情况?数据库连接?

为了降低延迟作业对您系统的影响,我只运行一名工作人员,并将其配置为大部分时间处于休眠状态。

Delayed::Worker::sleep_delay = 60 * 5  # in your initializer.rb

单个工作人员只会每 5 分钟醒来并检查数据库中的新作业。以这种方式运行可以防止您过多地“定制”。

但是,如果您真的想以Delayed::Worker编程方式启动,请在该类中查找work_off,并实现您自己的script/run_jobs_and_exit脚本。它可能看起来很像script/delayed_job- 3 行。

于 2009-11-13T04:41:48.077 回答
0

我发现这个是因为我正在寻找一种方法来运行一些后台作业,而无需花费所有的钱在不需要的时候一直运行它们。有人使用谷歌应用引擎进行了黑客攻击以运行后台作业:

http://viatropos.com/blog/how-to-run-background-jobs-on-heroku-for-free/

不过它有点过时了。线程中有一个有趣的评论:

“当我需要发送电子邮件、复制文件等时,我基本上将其添加到队列中。在每个请求结束时,它会检查队列中是否有任何内容。如果有,那么它使用 Heroku API 来设置工人为1。在工人完成任务结束时,它检查队列中是否还有任何东西。如果没有,则将工人设置回0。最终结果是后台工人将只为在这里和那里几秒钟。我可以完成我需要的所有后台处理,而月底的账单很少达到 1 小时的总工作价值。即使没有问题,我也会支付 0.05 美元的后台费用加工。 :)”

于 2011-02-10T02:40:23.790 回答
0

如果你去阻止一个工人,你会得到 PID。如果一切都失败了,你可以简单地杀死 -9 PID。

于 2013-01-12T02:50:06.007 回答