【发布时间】:2013-10-22 16:54:50
【问题描述】:
我希望能够从请求中终止 Sinatra 应用程序,例如使用以下路线:
post '/terminate' do
Thread.current.kill
end
像这样实现它有点突然。我宁愿请求完成,返回 HTTP OK 消息,然后 Sinatra 优雅地关闭。
有没有钩子可以做到这一点?
编辑:
我的应用程序是一个轻量级的模拟服务器,用于接收 webhook 通知。我将在同一台机器上使用多个这样的服务器(不同的端口),所以需要避免任何全局的启动/停止方法。
我的要求是因为每个服务器都必须在自己的 Ruby 实例中运行,因此我的测试和服务器之间除了通过 REST 接口之外没有通信。
我使用默认的thin 服务器来运行 Sinatra。到目前为止,我的代码只是 Sinatra::Base 的一个子类,从代码中开始使用run!。这很好,也很简单,我可以制作独立的脚本来实例化每个服务器,我只需要有一种方法来停止它们。
【问题讨论】:
-
根据您运行 sinatra 的机架服务器,您可以向它发送一些终止信号,例如
SIGKILL。这应该执行服务器的正常关闭。查看您的网络服务器的文档。 -
@phoet 查看我的扩展问题了解更多详情。如果您认为有办法选择特定的
thin服务器并将其发送给SIGKILLs,请作为答案提交。 -
如果你想实现一个轻量级的测试替身,我认为最好通过简单的服务器套接字来实现。这样你就可以完全控制运行时行为和它应该接收的调用数量。也不是很难做到。
-
测试替身已经编写好了,并且运行良好……使用 Sinatra 很容易。这是唯一悬而未决的问题。