« 2012年11月 | トップページ | 2013年6月 »

2013年4月の1件の記事

2013/04/05

Windows + Ruby + Webrick = ERROR CGIHandler

長らく更新しないので、すっかりアクセス数が減ってしまったブログを更新してみます。

今回は、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で検索しても全然情報が見つからなかったけど、みんな困ってないのかな。もしかして、こんな使い方してる人って他にいないのかもしれませんね(汗)

| | コメント (0) | トラックバック (0)

« 2012年11月 | トップページ | 2013年6月 »