以下の環境です。
$ ruby -v ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-solaris2]
こんなコードを書くと、
...略 f = open(@path, "w") doc = REXML::Document.new ...略 #doc.write(f) # エラーにならない doc.write(f, INDENT_SPACES, true, true) # エラー f.close ...略
REXML::Document#write で、以下のようなエラーメッセージを出力します。
$ ruby script/runner -e development batch/create_site_map_page.rb /opt/local/lib/ruby/1.8/rexml/document.rb:186:in `write': undefined local variable or method `transitive' for... :REXML::Document (NameError) from /...略.../lib/site_map_page.rb:52:in `save' from batch/create_site_map_page.rb:27 from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `eval' from /opt/local/lib/ruby/gems/1.8/gems/rails-2.3.2/lib/commands/runner.rb:46 from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' from script/runner:3
なんかREXMLのバグのようなんですよね。
NameError: undefined local variable or method 'transitive' in document.rb, line number 187
http://trac.germane-software.com//rexml/ticket/115
writeの二個目の引数が-1より大きいときに起きるバグ。
transitiveという変数をtransに変更すれば、直りそう。
/opt/local/lib/ruby/1.8/rexml/document.rb
...略 def write( output=$stdout, indent=-1, trans=false, ie_hack=false ) if xml_decl.encoding != "UTF-8" && !output.kind_of?(Output) output = Output.new( output, xml_decl.encoding ) end formatter = if indent > -1 if transitive ...略
さてどうするかなー。
もうどうせなら、ruby 1.9 を入れたい気分だ。