Tôi muốn tạo một máy chủ web cực kỳ đơn giản cho các mục đích phát triển trong Ruby (không, không muốn sử dụng các giải pháp đã sẵn sàng).Viết một máy chủ web đơn giản trong Ruby
Đây là mã:
#!/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
Ý tưởng là để chạy kịch bản này từ dòng lệnh, cung cấp một kịch bản khác, mà sẽ nhận được yêu cầu trên đầu vào tiêu chuẩn của nó, và đưa ra phía sau phản ứng đầy đủ về nó đầu ra tiêu chuẩn.
Cho đến nay rất tốt, nhưng điều này hóa ra là thực sự mong manh, vì nó phá vỡ theo yêu cầu thứ hai với các lỗi:
/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
Bất kỳ ý tưởng làm thế nào để cải thiện mã trên là đủ để sử dụng dễ dàng ?
phiên bản: Ubuntu 9.10 (2.6.31-20-generic), Ruby 1.8.7 (2009/06/12 patchlevel 174) [i486-linux]
Joó, Vì bạn và tôi đang nhận được các kết quả khác nhau như vậy, có lẽ bạn nên thêm vào câu hỏi của bạn các phiên bản Ruby và OS của bạn. –
Tôi đã thêm các phiên bản. –