关于使用救援的一些问题

时间:2011-12-13 04:27:40

标签: ruby-on-rails resque

我正在使用Resque来运行后台进程。这就是我的后台流程的工作原理:

  1. 扫描ActiveRecord模型中的所有行
  2. 检查条件
  3. 如果符合条件,则更新行
  4. 这需要无限下去。

    这就是我试图将Resque用于我的目的,这是我的工人类:

    class ThumbnailMaker
      @queue = :thumbnail_queue
    
      def self.perform()
        MyObj.check_thumbnails(root_url)
      end
    end
    

    我理解perform()方法将任务保存在队列中,该队列定期运行。在我的情况下,我需要一个扫描整个表的任务,因此它运行的时间更长。这是否符合我的要求?

    另一方面,我需要Rails应用程序的根URL,这可以通过Rails Controller中的root_url轻松获得。但我在我创建的课程中需要它,你能告诉我如何在这里得到它吗?

2 个答案:

答案 0 :(得分:1)

Resque用于排队任务在后台运行;队列中的每个项目都运行一次然后被删除。你想要的更像是一个计划任务 - 例如,custom Rake task或其他不时运行的脚本;有很多scheduling gems可用于此类事情(wenever非常受欢迎)或只是使用cron。关于这个主题有一个great RailsCasts episode

答案 1 :(得分:1)

您可能希望尝试将代码放在rake任务中并通过cron作业定期运行它。 Resque / Redis似乎对您的需求有点过分。

如果您通过控制器调用类,则可以考虑将根URL作为参数传递。否则,您可能希望将其设置为ENV设置并相应地配置每个部署。