我有一个项目,我有一个sinatra应用程序,我想通过管理ruby脚本文件轻薄启动它。我希望能够启动,停止并重新启动它,如果被要求也能够守护它。这是,我希望在我的脚本中有这样的东西:
require 'MyCLI'
MyCLI.new(ARGV).run
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
但我正在努力解决一些问题,
我需要守护它,具体取决于一些命令选项,并且无法在阅读文档并挖掘一些代码之后找到是否可以将一些参数传递给#new
。
停止就像@server.stop
一样简单,但是当我的脚本在每个命令行请求中实例化一个mycli对象时,我没有一个对象,所以@server在启动请求后消失,所以我认为唯一的解决方案是控制PID(对吗??),但无法找到管理它的精简程度。此外,在前台运行它不适用于我认为的这种pid方法。
重新启动它的正确方法是什么?
有没有人为此提供最佳解决方案?
答案 0 :(得分:2)
我最终使用Rack :: Server.start(app,host,port,env,daemonize(Y / N),pid_file)。
效果很好,如果可用,它会选择瘦处理程序。