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服务器的问题。 😉