首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止EventMachine前返回Sinatra响应

停止EventMachine前返回Sinatra响应
EN

Stack Overflow用户
提问于 2012-12-03 22:42:15
回答 1查看 357关注 0票数 0

我在event-machine中使用Sinatra,并希望在收到DELETE请求后关闭服务器并退出,并返回200OK。然而,现在我还不能达到这一点,并且总是在退出之前结束u返回一个空响应。我将如何实现这一点?相关代码如下:

代码语言:javascript
复制
EM.run do
  class Server < Sinatra::Base
    delete '*' do
      EM.defer proc{ halt 200 }, proc{ EM.stop }
     end
  end

  Server.run!
end

发生的情况是,我得到了一个空的回复,并得到了以下堆栈跟踪:

代码语言:javascript
复制
/Users/syeo/.rvm/gems/ruby-1.8.7-p352@instant-markdown-d/gems/sinatra-1.3.3/lib/sinatra/base.rb:803:in `throw': uncaught throw `halt' in thread 0x7fa4225f2020 (ThreadError)
    from /Users/syeo/.rvm/gems/ruby-1.8.7-p352@instant-markdown-d/gems/sinatra-1.3.3/lib/sinatra/base.rb:803:in `halt'
    from instant-markdown-d.rb:39:in `DELETE *'
    from /Users/syeo/.rvm/gems/ruby-1.8.7-p352@instant-markdown-d/gems/eventmachine-1.0.0/lib/eventmachine.rb:1037:in `call'
    from /Users/syeo/.rvm/gems/ruby-1.8.7-p352@instant-markdown-d/gems/eventmachine-1.0.0/lib/eventmachine.rb:1037:in `spawn_threadpool'
    from /Users/syeo/.rvm/gems/ruby-1.8.7-p352@instant-markdown-d/gems/eventmachine-1.0.0/lib/eventmachine.rb:1033:in `initialize'
    from /Users/syeo/.rvm/gems/ruby-1.8.7-p352@instant-markdown-d/gems/eventmachine-1.0.0/lib/eventmachine.rb:1033:in `new'
    from /Users/syeo/.rvm/gems/ruby-1.8.7-p352@instant-markdown-d/gems/eventmachine-1.0.0/lib/eventmachine.rb:1033:in `spawn_threadpool'
    from /Users/syeo/.rvm/gems/ruby-1.8.7-p352@instant-markdown-d/gems/eventmachine-1.0.0/lib/eventmachine.rb:1023:in `defer'
    from /Users/syeo/.rvm/gems/ruby-1.8.7-p352@instant-markdown-d/gems/thin-1.5.0/lib/thin/connection.rb:51:in `process'
    from /Users/syeo/.rvm/gems/ruby-1.8.7-p352@instant-markdown-d/gems/thin-1.5.0/lib/thin/connection.rb:39:in `receive_data'
    from /Users/syeo/.rvm/gems/ruby-1.8.7-p352@instant-markdown-d/gems/eventmachine-1.0.0/lib/eventmachine.rb:187:in `run_machine'
    from /Users/syeo/.rvm/gems/ruby-1.8.7-p352@instant-markdown-d/gems/eventmachine-1.0.0/lib/eventmachine.rb:187:in `run'
    from instant-markdown-d.rb:10

我也尝试了许多类似的方法,但无法找到发送200,然后关闭服务器的方法。

EN

回答 1

Stack Overflow用户

发布于 2012-12-09 00:48:46

最终做了这样的事情:

代码语言:javascript
复制
EM.run do
  class Server < Sinatra::Base
    delete '*' do
      EM.add_timer(0.2) do
        EM.stop
        exit
      end
      status 200
    end
  end

  Server.run!
end

这是一种黑客行为,但至少是可行的。

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

https://stackoverflow.com/questions/13685551

复制
相关文章

相似问题

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