« オープンソースの安否確認システム | トップページ | 第77回オープンソースサロン »

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

|

« オープンソースの安否確認システム | トップページ | 第77回オープンソースサロン »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/79953/57107867

この記事へのトラックバック一覧です: Windows + Ruby + Webrick = ERROR CGIHandler:

« オープンソースの安否確認システム | トップページ | 第77回オープンソースサロン »