问题描述
|
是否可以使用delay_job执行以下操作:
定义一个名为“ 0”的类
每隔5分钟运行一次“任务”中的方法:
Tasks.do_processing
当下一个5分钟的周期到来时,仅在上一个do_processing
完成后才运行Tasks.do_processing
这是我必须自己创建的东西,还是delay_job(或其他一些gem / plugin)可以做到这一点?
附言我知道OS级的cron作业,但是如果我使用它,那意味着每次cron“ fired”都会重新加载整个Rails环境,而delay_job只需要加载一次。
解决方法
您可以考虑创建一个处理此功能的Rake任务或其他类似的独立进程,然后将其包装到守护程序中:
什么是守护程序?
守护程序提供了一种简单的包装方法
现有的ruby脚本(例如
自行编写的服务器)作为
守护程序,并由简单的控制
启动/停止/重新启动命令。
如果需要,还可以使用守护程序
在守护程序中运行红宝石代码块
过程并控制这些过程
从主应用程序。
除了这个基本功能,
守护程序提供许多高级功能
如异常回溯和记录
(以防您的ruby脚本崩溃)和
监视并自动重启
您的流程崩溃了。
, 如果您想做类似的事情:
class MyJob
run_every 1.day
def perform
# code to run ...
end
end
然后尝试以下代码:https://gist.github.com/1024726
, 在DJ 2.1的生产环境中使用该版本已有一段时间。没有黑客,使用内置在钩子中的延迟作业。只要确保将名为“'queue \'的列添加到延迟的作业表中,我相信这还是DJ 3添加到该表中的内容。
, 以为我可以补充一点,delay_job_recurring gem是@kares \答案的要点的扩展。
用法示例:
class MyTask
include Delayed::RecurringJob
run_every 1.day
run_at \'11:00am\'
timezone \'US/Pacific\'
queue \'slow-jobs\'
def perform
# Do some work here!
end
end
并安排它。在Rails应用中,您可以将其放在初始化程序中:
MyTask.schedule!
, 周期性的延迟工作:
http://rifkifauzi.wordpress.com/2010/07/29/8/
, 您可以使用https://github.com/codez/delayed_cron_job(这是“延迟作业”插件)来设置定期作业。