Если код дословно, то, я думаю, у вас есть опечатка в первой строке: вы имели в виду CONTENT_LENGHT
или это опечатка? ENV [] вернет строку, если переменная установлена, что расстроит STDIN#read
. Я получаю TypeError: can't convert String into Integer
. Если предположить опечатку, то ENV[]
возвращает nil
, что говорит STDIN#read
читать до EOF, что, как мне кажется, с консоли означает Control-Z. Это может быть причиной проблемы.
Я предлагаю вам провести расследование, изменив свой сценарий следующим образом:
read_length = ENV["CONTENT_LENGTH"].to_i # assumed typo fixed, convert to integer
puts "read length = #{read_length}"
input = STDIN.read( read_length )
puts "input = #{input}"
puts "Content-type: text/html \n\n" # this seems to serve no purpose
require 'digest/md5'
digest = Digest::MD5.hexdigest(input)
puts "digest = #{digest}"
# prefer this version: it's more idiomatically "Rubyish"
File.open("register.txt", "a") do |f|
puts "file opened"
f.puts(digest)
end
file_content = File.read("register.txt")
puts "done, file content = #{file_content}"
Это работает на моей машине со следующим выводом (когда CONTENT_LENGTH установлен в 12):
read length = 12
abcdefghijkl
input = abcdefghijkl
Content-type: text/html
digest = 9fc9d606912030dca86582ed62595cf7
file opened
done, file content = 6cfbc6ae37c91b4faf7310fbc2b7d5e8
e271dc47fa80ddc9e6590042ad9ed2b7
b0fb8772912c4ac0f13525409c2b224e
9fc9d606912030dca86582ed62595cf7