У меня есть следующий код, в котором раздвоенный экземпляр WEBrick, и я хочу, чтобы ждать, пока WEBrick запускается, прежде чем продолжить с остальной частью кода:Вилка WEBrick и ждать начала
require 'webrick'
pid = fork do
server = WEBrick::HTTPServer.new({:Port => 3333, :BindAddress => "localhost"})
trap("INT") { server.shutdown }
sleep 10 # here is code that take some time to setup
server.start
end
# here I want to wait till the fork is complete or the WEBrick server is started and accepts connections
puts `curl localhost:3333 --max-time 1` # then I can talk to the webrick
Process.kill('INT', pid) # finally the webrick should be killed
Итак, как я могу дождаться завершения вилки, или даже лучше, пока WEBrick не будет готов к подключению? Я нашел фрагмент кода, где они имеют дело с IO.pipe
и читателем и писателем. Но это не дожидается, когда webrick загрузится.
К сожалению, я ничего не нашел для этого конкретного случая. Надеюсь, кто-то может помочь.
чудное! Я только заменил ваш rd.read (1); rd.close' с 'raise 'Сервер не запускается« если только rd.wait (10) », так что я могу указать тайм-аут и поднять ошибку. Спасибо за ответ! – 23tux