是否可以使用delayed_job执行以下操作:
定义一个名为Tasks
每5分钟后在任务中运行一个方法:Tasks.do_processing
当下一个5分钟周期出现时,如果上一个 Tasks.do_processing
已完成,则仅运行do_processing
这是我必须自己创建的还是delayed_job(或其他一些gem /插件)可以这样做吗?
Ps。我知道操作系统级别的cron作业,但是如果我使用它,则意味着每次cron“触发”它都会重新加载整个Rails环境,而delayed_job只需加载一次。
答案 0 :(得分:5)
您可以考虑创建一个Rake任务或其他类似的独立进程来处理此功能,然后使用Daemons将其包装起来:
什么是守护进程?
守护进程提供了一种简单的包装方式 现有的ruby脚本(例如a 自编服务器)作为一个 守护进程并由简单控制 启动/停止/重启命令。
如果需要,您还可以使用守护进程 在守护进程中运行ruby代码块 过程并控制这些过程 来自主要应用程序。
除了这个基本功能, 守护进程提供许多高级功能 例如异常回溯和记录 (如果您的ruby脚本崩溃)和 监控和自动重启 你的流程如果崩溃了。
答案 1 :(得分:5)
如果你想做类似的事情:
class MyJob
run_every 1.day
def perform
# code to run ...
end
end
然后试用这段代码:https://gist.github.com/1024726
答案 2 :(得分:1)
现在正在制作this版本的DJ 2.1版。没有hackery,使用内置挂钩的延迟作业。只需确保将名为“queue”的列添加到延迟作业表中,我认为这是表格中添加了DJ 3的内容。
答案 3 :(得分:1)
我想可以补充一点,delayed_job_recurring宝石是@ 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!
答案 4 :(得分:0)
重复发生delayed_job:
答案 5 :(得分:0)
您可以使用https://github.com/codez/delayed_cron_job这是一个延迟作业插件来设置定期作业。