首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我能在Sinatra的申请中阻止Sinatra吗?

我能在Sinatra的申请中阻止Sinatra吗?
EN

Stack Overflow用户
提问于 2013-09-25 14:18:40
回答 4查看 1.7K关注 0票数 3

我想知道如何以编程方式从应用程序本身中退出Sinatra应用程序。(还有一条关于从应用程序外部阻止它的帖子。)

我想使用Sinatra作为接收控制和配置命令的手段,而我的应用程序则做一些与Sinatra无关的事情。我希望其中一个控制命令是‘退出’。Ruby的“退出”方法似乎只会导致Sinatra恢复和恢复。我在base.rb中发现了这个,我认为这证实了这一点:

代码语言:javascript
运行
复制
at_exit { Application.run! if $!.nil? && Application.run? }

到目前为止,我发现的唯一方法是调用Ruby的exit!方法,但这绕过了exit钩子,而且不是一个非常干净的解决方案。

有没有办法以编程的方式告诉辛纳特拉停止?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-10-09 08:10:32

我使用了以下代码:

代码语言:javascript
运行
复制
# 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,它适用于术语信号:

代码语言:javascript
运行
复制
at_exit do
  puts 'Damn!'
  exit false
end

完整的例子是这里

干杯。

票数 3
EN

Stack Overflow用户

发布于 2013-09-25 14:56:05

这种做法违背了Sinatra的原则,但这只是Ruby,所以您可以通过开放的类/猴子补丁轻松地做到这一点。

只需重新打开base.rb at_exit方法并重写Application.run!行为。

票数 1
EN

Stack Overflow用户

发布于 2015-10-09 08:15:52

为什么不提出一个例外呢?这意味着$!不是零,所以at_exit处理程序不会重新启动Sinatra。

一个简单的方法就是只运行failraise。您还可以传递一条消息,例如fail "Exiting due to x"

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19007487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档