我想知道如何以编程方式从应用程序本身中退出Sinatra应用程序。(还有一条关于从应用程序外部阻止它的帖子。)
我想使用Sinatra作为接收控制和配置命令的手段,而我的应用程序则做一些与Sinatra无关的事情。我希望其中一个控制命令是‘退出’。Ruby的“退出”方法似乎只会导致Sinatra恢复和恢复。我在base.rb中发现了这个,我认为这证实了这一点:
at_exit { Application.run! if $!.nil? && Application.run? }
到目前为止,我发现的唯一方法是调用Ruby的exit!
方法,但这绕过了exit
钩子,而且不是一个非常干净的解决方案。
有没有办法以编程的方式告诉辛纳特拉停止?
发布于 2015-10-09 08:10:32
我使用了以下代码:
# Exit 'correctly'
get '/exit' do
# /exit causes:
# 15:20:24 web.1 | Damn!
# 15:20:24 web.1 | exited with code 1
Process.kill('TERM', Process.pid)
end
# Just terminate
get '/fail' do
Process.kill('KILL', Process.pid)
end
看看at_exit
in config.ru,它适用于术语信号:
at_exit do
puts 'Damn!'
exit false
end
完整的例子是这里。
干杯。
发布于 2013-09-25 14:56:05
这种做法违背了Sinatra的原则,但这只是Ruby,所以您可以通过开放的类/猴子补丁轻松地做到这一点。
只需重新打开base.rb at_exit
方法并重写Application.run!
行为。
发布于 2015-10-09 08:15:52
为什么不提出一个例外呢?这意味着$!
不是零,所以at_exit
处理程序不会重新启动Sinatra。
一个简单的方法就是只运行fail
或raise
。您还可以传递一条消息,例如fail "Exiting due to x"
。
https://stackoverflow.com/questions/19007487
复制相似问题