Sinatra – 从请求终止服务器
我希望能够从请求中终止Sinatra应用程序,例如使用以下路由:
post '/terminate' do Thread.current.kill end
像这样实现它有点突然。 我宁愿完成请求,返回HTTP OK消息,然后Sinatra优雅地关闭。
这样做有钩子吗?
编辑:
我的应用程序是一个轻量级的模拟服务器,用于接收webhook通知。 我将在同一台机器(不同的端口)上使用这样的多个服务器,因此需要避免任何全局启动/停止方法。
我的要求是由每个服务器必须在其自己的Ruby实例中运行的事实驱动的,因此除了通过REST接口之外,我的测试和服务器之间没有通信。
我正在使用默认的thin
服务器来运行Sinatra。 到目前为止,我的代码只是Sinatra :: Base的一个子类,开始使用run!
从代码中。 这很简单,我可以制作独立的脚本来实例化每个服务器,我只需要有一种方法来阻止它们。
这似乎归结为在发送响应后运行代码的问题。 这不是一件容易的事:
真正的sinatra(ruby / rack)after_filter的最快方法是什么?
也就是说,看起来你可以做这样的事情(虽然我没有测试过):
post '/terminate' do body "I'll be back..." # maybe clean things up here... logger.info "Received terminate request!" Thread.new { sleep 1; Process.kill 'INT', Process.pid } halt 200 end
似乎非常“hacky”,但我质疑能够通过调用URI远程关闭Web服务器的问题。 😉