1

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

every 5.minutes do
  runner Task.perform
end

但是代价太大了。无论如何在预加载的环境中执行这种任务?还是有其他更好的解决方案?

4

2 回答 2

1

考虑使用后台进程(许多 gem,尤其是延迟作业)并在您的代码中使用轮询循环实现一个简单的“cron”,例如

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

警告:这个例子比一片瑞士奶酪有更多的洞。写一些更好的东西:-)

于 2012-11-09T16:42:01.613 回答
0

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

于 2012-11-09T16:40:49.267 回答