通过Ruby脚本管理Thin服务器

时间:2011-12-26 23:00:51

标签: ruby sinatra thin

我有一个项目,我有一个sinatra应用程序,我想通过管理ruby脚本文件轻薄启动它。我希望能够启动,停止并重新启动它,如果被要求也能够守护它。这是,我希望在我的脚本中有这样的东西:

仓/ MyScript可
require 'MyCLI'
MyCLI.new(ARGV).run

LIB / mycli.rb

class MyCLI
   # instantiate and other methods (inspired by thin runner)
   ...
   def run
      # parse commands and options 
      ...
      # then process command 
      case @command
         when 'start'
            @server = Thin::Server.new(host, port, MyModule::MyAppClass)
            @server.start 
         when 'stop'
            # ?
         when 'restart'
            # ?
         else
            raise "Unknown command"
      end
   end
end

但我正在努力解决一些问题,

  1. 我需要守护它,具体取决于一些命令选项,并且无法在阅读文档并挖掘一些代码之后找到是否可以将一些参数传递给#new

  2. 停止就像@server.stop一样简单,但是当我的脚本在每个命令行请求中实例化一个mycli对象时,我没有一个对象,所以@server在启动请求后消失,所以我认为唯一的解决方案是控制PID(对吗??),但无法找到管理它的精简程度。此外,在前台运行它不适用于我认为的这种pid方法。

  3. 重新启动它的正确方法是什么?

  4. 有没有人为此提供最佳解决方案?

1 个答案:

答案 0 :(得分:2)

我最终使用Rack :: Server.start(app,host,port,env,daemonize(Y / N),pid_file)。

效果很好,如果可用,它会选择瘦处理程序。