【问题标题】:Manage a Thin server through a Ruby script通过 Ruby 脚本管理瘦服务器
【发布时间】:2011-12-26 23:00:50
【问题描述】:

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

bin/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. 重新启动它的正确方法是什么?

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

【问题讨论】:

  • god.rubyforge.org试过了吗?
  • 嗨,我想缩小依赖关系,所以我想只保留精简代码。是否有一个简单的等待?
  • 您是否尝试过使用qxsystem 等来调用命令行客户端?我知道这并不花哨,但它会起作用。

标签: ruby sinatra thin


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    相关资源
    最近更新 更多