2012-11-09 34 views
1

在我的应用程序中,我需要每5分钟执行一次任务。任务本身非常精简,所以这不是问题:关键是加载Rails环境几乎可以使用服务器的所有CPU。现在,我在我的schedule.rb使用whenever有这样的代码:在Rails中执行周期性任务而不加载整个环境

every 5.minutes do 
    runner Task.perform 
end 

但成本太大。无论如何要在预加载的环境中执行这种任务吗?或者其他更好的解决方案?

回答

0

您可以使用cron作业或将其设置为在bash脚本中运行。这些将有没有被绑定到您的应用程序的优势。

+0

这就是'每当'的。如果我正确地阅读OP的问题,问题是每五分钟加载整个Rails堆栈的成本。 –

1

考虑使用一个后台进程(许多宝石,尤其是delayed job)和执行代码中的一个简单的“cron的”与轮询循环像

def perform 
    last = Time.now 
    while true 
    if last.sec % (5 * 60) != 0 
     do_task 
     last = Time.now 
    end 
    end 
end 

警告:这个例子比一片多个孔瑞士芝士。写一些更好的:-)