代码之家  ›  专栏  ›  技术社区  ›  Bob Aman

对于框架不可知的Ruby后台工作库,最好的选择是什么?

  •  0
  • Bob Aman  · 技术社区  · 15 年前

    我正在用Ruby和Sinatra为iPhone应用程序构建一个简单的配方搜索引擎,使用RabbitMQ作为我的消息队列。我环顾四周,发现后台进程有很多不同的实现选择,但大多数选择要么实现定制的消息队列算法,要么作为Rails插件运行。

    对于可以与rabbitmq很好地配合使用的高质量框架不可知的工作库,有什么存在呢?

    在编写工作代码时,除了以下显而易见的几点之外,还有没有什么最佳实践值得我记住:

    # BAD, don't do this!
    begin
      # work
    rescue Exception
    end
    
    3 回复  |  直到 15 年前
        1
  •  1
  •   Mihai A    15 年前

    我正在使用beanstack,并使用 daemons gem . Daemon kit 是一个新项目,但队列循环尚未实现。你也可以看看 Nanite 如果它符合你的需要,它是框架不可知论的。

        2
  •  1
  •   Bob Aman    15 年前

    我最后写了 my own library 在一阵无法控制的牦牛剃须中。Daemon工具包是正确的总体想法,但严重的是,它太重了,不适合我的需要。我不想让我的每个守护进程都有一个完整的Rails应用程序。我将最终得到至少3个守护进程,这将是一个庞大的目录混乱。守护进程gem有一个糟糕的API,当我试图将其抽象掉时,我意识到自己管理fork可能更容易,所以我就是这么做的。

    API如下:

    require "rubygems"
    require "chaingang"
    
    class Worker
      def setup
        # Set up connections here
      end
    
      def teardown
        # Tear down connections here
      end
    
      def call
        # Do some work
        sleep 1
      end
    end
    ChainGang.prepare(Worker.new)
    

    然后您只需使用包含的rake任务来启动/停止/重新启动或检查状态。我从机架剧本上取了一页:任何实现 call 方法是公平的游戏,作为chaingang.prepare和chaingang.work方法的参数,因此 Proc 是有效的工作对象。

    我花了更长的时间来建造,而不是使用其他东西,但我有一个模糊的怀疑,从长远来看它会有回报。

        3
  •  0
  •   A.Ali    15 年前

    看看Nanite(用Ruby写的),它是一个在rabbitmq上写的年轻项目。

    github.com/ezmobius/nanite/tree/master

    推荐文章