繁体   English   中英

(RAILS)每2分钟循环一次定制耙子,坏主意? 更好的实施方式?

[英](RAILS) Looping a Custom Rake every 2 mins, Bad Idea? Better way to implement?

我目前创建了一个自定义rake文件,它执行以下操作:

1.)检查“NEW”项目的外部Feed

2.)对于Feed数组中的每个项目,它使用新记录更新我的数据库

3.)我目前在WHILE循环上得到它。 while循环有一个(@loopcheck)实例变量,最初设置为true,如果引发任何异常。 将其重置为false(因此循环结束)。

这是一个例子:

   While(@loopcheck) do 
      begin
       ....(code here)...
      rescue
        Exception => e
        @loopcheck = false
      end
      sleep(120)
   End

这是不好的编码? 有一个更好的方法吗? 理想情况下,我只想运行后台任务,每2-3分钟检查一次新的Feed。 我查看了Starling / Workling,但这看起来有点像矫枉过正,我不确定是否通过CRON运行脚本/跑步者,因为它每次都会重新加载整个rails环境。 BackgroundRB有点矫枉过正吗? 没有?

只是想得到一些想法。

将cron与睡眠相结合。 如果您遇到异常,它将确保事情不会彻底崩溃。 加载“完整的轨道环境”并不是那么糟糕:3-6秒的最坏情况。 所以运行你的睡眠循环5次。 和cron每12分钟运行一次rake任务。 说得通?

*/12 * * * * rake your task

## your rake task - valid for 10 mins -- 5 x 2 mins sleep worth.

@loopcheck = true

1.upto(5) do 
    begin
       ....(code here)...
    rescue
      Exception => e
      @loopcheck = false
    end
    break if not @loopcheck
    sleep(120)
end

查看最近的Railscast“Whenever”

链接在这里,评论讨论替代方案

http://railscasts.com/episodes/164-cron-in-ruby

假设你在Unix机器上,这个最简单的事情就是每两分钟从cron运行一次脚本,没有循环/睡眠。 这样可以避免在脚本失败时监视并重新启动脚本。 如果确实失败了,cron会给你发一封电子邮件。

正如您所指出的,这种方法的缺点是,每两分钟您就会开始使用Ruby进程。 这有意义吗? 只有你可以说。 我在一个装载很轻的盒子上有几个这样的脚本,忘了它们就在那里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM