Pat*_*ick 13 ruby asynchronous ruby-on-rails scheduled-tasks
我在rails应用程序上有一个ruby,我试图找到一种方法来每隔几秒运行一些代码.
我已经使用cron或类似cron的实现找到了很多信息和想法,但这些只是精确到一分钟,和/或需要外部工具.我想每15秒左右关闭一次任务,我希望它完全自包含在应用程序中(如果应用程序停止,任务停止,没有外部设置).
这用于缓存数据的后台生成.每隔几秒,任务将汇总一些数据,然后将其存储在缓存中,该缓存将被所有客户端请求使用.任务很慢,因此需要在后台运行而不是阻止客户端请求.
我对ruby很新,但是有一个强大的perl背景,我解决这个问题的方法就是创建一个间隔计时器和处理程序,它会分叉,运行代码,然后在完成后退出.
仅模拟客户端请求并让rails控制器自行分配可能更好.这样我可以通过点击它来启动任务(虽然任务将每隔几秒运行一次,我怀疑我将需要,但可能有将来使用).虽然让控制器调用周期性任务调度程序调用的任何方法(一旦我有一个),这将是微不足道的.
bre*_*c79 11
我建议每当宝石https://github.com/javan/whenever
它允许您指定如下的计划:
every 15.minutes do
MyClass.do_stuff
end
Run Code Online (Sandbox Code Playgroud)
没有安排cron工作或使用外部服务进行调整.
一般来说,据我所知,没有内置方法可以在应用程序中创建定期任务。Rails 构建在 Rack 之上,它期望接收 http 请求,执行某些操作,然后返回。所以你只需要自己在外部管理周期性任务。
我认为考虑到您需要运行该任务的频率,一个不错的解决方案可能就是为自己编写一个永远循环的简单 rake 任务,并在启动应用程序的同时使用 Foreman 之类的工具启动它。Foreman 经常像这样使用来管理启动/关闭后台工作人员及其应用程序。在生产中,您可能需要使用其他东西来管理流程,例如 Monit。
归档时间: |
|
查看次数: |
8117 次 |
最近记录: |