在我的应用程序中,我需要每 5 分钟执行一次任务。任务本身非常精简,所以这不是问题:关键是加载 Rails 环境几乎使用了服务器的所有 CPU。现在,我正在使用whenever
这样的代码schedule.rb
:
every 5.minutes do
runner Task.perform
end
但是代价太大了。无论如何在预加载的环境中执行这种任务?还是有其他更好的解决方案?
在我的应用程序中,我需要每 5 分钟执行一次任务。任务本身非常精简,所以这不是问题:关键是加载 Rails 环境几乎使用了服务器的所有 CPU。现在,我正在使用whenever
这样的代码schedule.rb
:
every 5.minutes do
runner Task.perform
end
但是代价太大了。无论如何在预加载的环境中执行这种任务?还是有其他更好的解决方案?
考虑使用后台进程(许多 gem,尤其是延迟作业)并在您的代码中使用轮询循环实现一个简单的“cron”,例如
def perform
last = Time.now
while true
if last.sec % (5 * 60) != 0
do_task
last = Time.now
end
end
end
警告:这个例子比一片瑞士奶酪有更多的洞。写一些更好的东西:-)
您可以使用 cron 作业或将其设置为在 bash 脚本中运行。这些将具有不与您的应用程序绑定的优点。