TKS.と申します。 不可解な問題が起きており、私の手に負えないのでとりあえず報告してみます。 現在 ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-linux] で、 ruby-sqlite3 + ERB + fastcgi(pure ruby版、each_cgiでCGI動作) を使用し CGIを作っています。 ERB::Compiler#compile で > scanner.scan { |token| ... } とし、内部的には ERB::Compiler::TrimScanner#trim_line2 で > (RHTMLの1行).split(正規表現).each{ |token| ...; yield token } と返ってきているのですが、ERB::Compiler#compile に ブロック引数として渡される token に Fixnum が混じります。 また、この Fixnum は、Rubyのコードに無意味な改行を入れたりすることで 混ざったり混ざらなかったりします。 入出力を見てみたところ次のようになっていました。 パース対象のRHTML行: "\t\t</div>\n" > trim_line2 token: [String, "\t\t</div>"] > compile token: [String, "\t\t</div>"] > compile token: [Fixnum, 136134264] (何故か trim_line2 を経由せず) > ./rb/erb.rb:556:in `<<': can't convert Fixnum into String (TypeError) パース対象のRHTML行: "<li>開始:<%= gname %> [<%= gplace %><%= gloc2 %>]</li>\n" > trim_line2 token: "<li>開始:" > compile token: "<li>開始:" > (中略) > trim_line2 token: [String, " ["] > compile token: [String, " ["] > trim_line2 token: [String, "<%="] > compile token: [Fixnum, 135817580"] (渡されたときに変化?) > ./rb/erb.rb:555:in `<<': can't convert Fixnum into String (TypeError) TypeErrorを無視してFixnumの前後を確認。 パース対象のRHTML行: "<li>開始:<%= gname %> [<%= gplace %><%= gloc2 %>]</li>\n" (前略) > trim_line2 token: "<%=" > compile token: [String, "<%="] > compile token: [Fixnum, 136362012] > compile token: [Fixnum, 135990180] (15行中略、全て Fixnum) > compile token: [Fixnum, 135792180] > compile token: [Fixnum, 135740336] > trim_line2 token: [String, " gloc2 "] > compile token: [String, " gloc2 "] (Fixnumが無駄に送られてくるだけで、これを無視すれば正常) 上記は全て token を監視する部分以外は同じコードでした。 特に1つめと2つめは無意味な改行を挿入しただけでこの様な変化が起きました。 コードに一切の変更がない場合は、Fixnumの値も含めて全て同じ状況になりました。 また、無意味な半角スペースを入れた場合、Fixnumが来る場所は同じですが 値が変わる場合がありました。(規則性は不明でした) 以前にも似た状況になったことがあります。 その時は Cygwin で、Ruby は 1.8.5 ぐらいだったと思いますが、 ActiveRecord + ruby-sqlite3 + ERB + mongrel でした。 とりあえず Fixnum を全て無視して利用した覚えがあります。 ここまで調べたところで時間的に厳しくなってきたので とりあえずご報告させていただきます。 再現できる短いコードを見つけたらまたご報告します。