Ruby 将线程同步到WEBrick服务器启动
我正在尝试启动一个小型WEBrick服务器来模拟一个真实的API,以测试我正在开发的Ruby http客户机。我正在使用一个基于博客评论的改进解决方案 它可以正常工作,但问题是每次服务器启动时,父线程都必须等待任意时间才能加载服务器。在添加了几个测试之后,它变得非常慢 因此,我的问题是:是否有一种方法可以在服务器线程完成启动WEBRick后立即同步父线程以继续? 我试着查看WEBrick参考资料,搜索网页,甚至查看了WEBrick代码,但是如果没有一些非常讨厌的猴子补丁,我就没有什么用处了 我对解决这个问题的其他方法持开放态度,但我希望它尽可能不依赖于gems和库。此外,解决方案必须在Linux上运行于Ruby 1.9.2 提前感谢您的回答Ruby 将线程同步到WEBrick服务器启动,ruby,multithreading,mocking,webrick,Ruby,Multithreading,Mocking,Webrick,我正在尝试启动一个小型WEBrick服务器来模拟一个真实的API,以测试我正在开发的Ruby http客户机。我正在使用一个基于博客评论的改进解决方案 它可以正常工作,但问题是每次服务器启动时,父线程都必须等待任意时间才能加载服务器。在添加了几个测试之后,它变得非常慢 因此,我的问题是:是否有一种方法可以在服务器线程完成启动WEBRick后立即同步父线程以继续? 我试着查看WEBrick参考资料,搜索网页,甚至查看了WEBrick代码,但是如果没有一些非常讨厌的猴子补丁,我就没有什么用处了 我对
require "rack"
class ApiMockServer
def initialize(port = 4000, pause = 1)
@block = nil
@parent_thread = Thread.current
@thread = Thread.new do
Rack::Handler::WEBrick.run(self, :Port => port, :Host => "127.0.0.1")
end
sleep pause # give the server time to fire up… YUK!
end
def stop
Thread.kill(@thread)
end
def attach(&block)
@block = block
end
def detach()
@block = nil
end
def call(env)
begin
unless @block
raise "Specify a handler for the request using attach(block). The " +
"block should return a valid rack response and can test expectations"
end
@block.call(env)
rescue Exception => e
@parent_thread.raise e
[ 500, { 'Content-Type' => 'text/plain', 'Content-Length' => '13' }, [ 'Bad test code' ]]
end
end
end
如果您正在对某些东西进行机架测试,为什么不使用Rack::Test,它就可以做到这一点?我没有使用它,主要是因为我不知道它…:-)此外,如果http客户机测试没有任何外部依赖项,则会更好。不过,我还是会看一看。。。据我所见,它完全删除了WEBrick服务器,只返回我准备好的响应。。。这很有趣。。。谢谢你的回答。是的,它嘲弄了你所有的要求。很抱歉这样回答,假设每个人都知道Rack::Test谁在使用Rack或Rails:)