Управляйте тонким сервером через Ruby-скрипт - PullRequest
2 голосов
/ 27 декабря 2011

У меня есть проект, в котором у меня есть приложение 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. Каков будет правильный способ перезапустить его?

У кого-нибудь есть лучшее решение для этого?

1 Ответ

2 голосов
/ 04 января 2012

Я использую Rack :: Server.start (приложение, хост, порт, env, daemonize (Y / N), pid_file).

Он отлично работает, и при наличии подхватит тонкий обработчик.

...