Я хочу создать чрезвычайно простой веб-сервер для разработки в Ruby (нет, не хотите использовать готовые решения).Написание простого веб-сервера в Ruby
Вот код:
#!/usr/bin/ruby
require 'socket'
server = TCPServer.new('127.0.0.1', 8080)
while connection = server.accept
headers = []
length = 0
while line = connection.gets
headers << line
if line =~ /^Content-Length:\s+(\d+)/i
length = $1.to_i
end
break if line == "\r\n"
end
body = connection.readpartial(length)
IO.popen(ARGV[0], 'r+') do |script|
script.print(headers.join + body)
script.close_write
connection.print script.read
end
connection.close
end
Идея заключается в том, чтобы запустить этот сценарий из командной строки, обеспечивая другой сценарий, который получит запрос на стандартный ввод и возвращает полный ответ на его стандартный выход.
До сих пор так хорошо, но это оказывается очень хрупким, так как она разрушает на второй запрос с ошибкой:
/usr/bin/serve:24:in `write': Broken pipe (Errno::EPIPE)
from /usr/bin/serve:24:in `print'
from /usr/bin/serve:24
from /usr/bin/serve:23:in `popen'
from /usr/bin/serve:23
Любая идея, как улучшить код выше, чтобы быть достаточным для удобного использования ?
Версия: Ubuntu 9.10 (2.6.31-20-родовой), Ruby 1.8.7 (2009-06-12 174 номер патчи) [i486-Linux]
Joó, Так как вы и я получаем такие разные результаты, возможно, вы должны добавить к своему вопросу свои версии Ruby и OS. –
Я добавил версии. –