毎週木曜の演習の準備をしていて,自作のRubyスクリプトが期待通りに動かず,あせりました.
エラーメッセージはこんな感じ.2番目の「(略)」は,なぜか,URI文字列の一部でした.
(略)/lib/ruby/1.8/uri/common.rb:436:in `split': bad URI(is no (URI::InvalidURIError)(略)
実行するコマンドは,あるテキストファイルに記述していまして,シェルからは「$(cat テキストファイル)」で実行しています.そういうテキストファイルが5つありまして,2つが成功,3つで,上記のエラーになりました.
Rubyリファレンスマニュアルを見て,URI#splitのバグか,まさかな,と思いながら,自作コードのsplitをparseに変更してみても,依然としてエラーが出ます.
お外を少し調べると,原因がわかりました.
- Re: Digest Articles 12186-12187 (1/1) (ruby-core ML)
- Misleading error message with URI::InvalidURIError - Douglas Tan - org.ruby-lang.ruby-core - MarkMail
ポイントは
I believe that URI.split has an undocumented precondition on the uri parameter, that it should not contain any whitespace around it.
で,URI文字列の前後に空白文字があるとダメ,とのこと.
実際,エラーの出る直前に,文字列の内容を見てみると,改行がついていました.
では取り除きましょう…
@uri_string = param @uri = URI.parse(@uri_string)
のところを
@uri_string = param.strip @uri = URI.parse(@uri_string)
に書き換えて,問題解決しました.