長らく更新しないので、すっかりアクセス数が減ってしまったブログを更新してみます。
今回は、WindowsでRubyを使うときに、以下のサイトからダウンロードしたものを使って
WebrickでWebサーバーを立ち上げるとエラーで動かなかったという問題を解決する手順を
書いてみます。
http://www.garbagecollect.jp/ruby/mswin32/ja/download/release.html
使用するRubyのソースコードは以下のとおりで、ファイル名は「index.rb」とします。
require 'rubygems'
puts <<EOF
Content-Type: text/html
<html>
<body>
Test.
</body>
</html>
EOF
これをWebrickを使ったWebサーバでブラウザから読み込んでみました。
詳細については下記URLが参考になると思います。
http://jp.rubyist.net/magazine/?0011-CGIProgrammingForRubyBeginners
すると以下のエラーが出て、動きませんでした。
[2013-04-05 05:31:38] ERROR CGIHandler: C:/html/index.rb:
c:/ruby/lib/ruby/1.9.1/rubygems/config_file.rb:56:in `join': can't convert nil into String (TypeError)
from c:/ruby/lib/ruby/1.9.1/rubygems/config_file.rb:56:in `'
from c:/ruby/lib/ruby/1.9.1/rubygems/config_file.rb:28:in `'
from :29:in `require'
from :29:in `require'
from c:/ruby/lib/ruby/1.9.1/rubygems.rb:1110:in `'
from :29:in `require'
from :29:in `require'
from C:/html/index.rb:1:in `'
[2013-04-05 05:31:38] ERROR CGIHandler: C:/html/index.rb exit with 1
[2013-04-05 05:31:38] ERROR Premature end of script headers: C:/html/index.rb
ちなみに、先ほどのファイルをコマンドラインから実行すると問題なく実行できます。
c:¥> ruby html¥index.rb
そこで、エラーに関係している以下のファイルをテキストエディタで開いてみます。
c:¥ruby¥lib¥ruby¥1.9.1¥rubygems¥config_file.rb
46 PLATFORM_DEFAULTS = {}
47
48 system_config_path =
49 begin
50 require 'etc.so'
51 Etc.sysconfdir
52 rescue LoadError
53 '/etc'
54 end
55
56 SYSTEM_WIDE_CONFIG_FILE = File.join system_config_path, 'gemrc'
この56行目でエラーが発生しているので、system_config_pathに入っている文字列を確認してみます。
コマンドプロンプトでirbを使うとわかります。
C:\>irb
irb(main):001:0> require 'etc.so'
=> true
irb(main):002:0> puts Etc.sysconfdir
C:/ProgramData
=> nil
irb(main):003:0>exit
どうやら「C:/ProgramData」と表示されるのが正しいようですので、以下のとおり書き換えちゃいました。
46 PLATFORM_DEFAULTS = {}
47
48 system_config_path =
49 begin
50 require 'etc.so'
51 Etc.sysconfdir
52 "C:/ProgramData"
53 rescue LoadError
54 '/etc'
55 end
56
57 SYSTEM_WIDE_CONFIG_FILE = File.join system_config_path, 'gemrc'
書き換えた後、WebrickでWebサーバを立ち上げ直し、ブラウザからアクセスするときちんと表示されました!
しかし、Googleで検索しても全然情報が見つからなかったけど、みんな困ってないのかな。もしかして、こんな使い方してる人って他にいないのかもしれませんね(汗)
最近のコメント