td2planetがこける。

CouchDB JPplanet が表示されていないことに気づいて調べてみた。

/usr/lib/ruby/1.8/uri/common.rb:436:in `split': bad URI(is not URI?): http://satoshi.blogs.com/life/2009/10/restful-mvc〓 〓〓‚¢〓ƒ¼〓‚ 〓ƒ†〓‚〓〓ƒ 〓ƒ£〓 〓〓〓±.html (URI::InvalidURIError)
       from /usr/lib/ruby/1.8/uri/common.rb:485:in `parse' from /usr/lib/ruby/1.8/td2planet/formatter.rb:123:in `relative_path_to_absolute_uri'
       from /usr/lib/ruby/1.8/td2planet/formatter.rb:133:in `tag_attr_relative_path_to_absolute_uri'
       from /usr/lib/ruby/1.8/td2planet/formatter.rb:132:in `gsub!'
       from /usr/lib/ruby/1.8/td2planet/formatter.rb:132:in `tag_attr_relative_path_to_absolute_uri'
       from /usr/lib/ruby/1.8/td2planet/formatter.rb:143:in `to_section_body'
       from /usr/lib/ruby/1.8/td2planet/formatter.rb:142:in `gsub'
       from /usr/lib/ruby/1.8/td2planet/formatter.rb:142:in `to_section_body'
       from /usr/share/td2planet/templates/section.rhtml:3:in `section'
       from /usr/share/td2planet/templates/day.rhtml:18:in `day'
       from /usr/share/td2planet/templates/day.rhtml:17:in `each'
       from /usr/share/td2planet/templates/day.rhtml:17:in `day'
       from /usr/share/td2planet/templates/layout.rhtml:24:in `layout'
       from /usr/share/td2planet/templates/layout.rhtml:23:in `each'
       from /usr/share/td2planet/templates/layout.rhtml:23:in `layout'
       from /usr/lib/ruby/1.8/td2planet/formatter.rb:119:in `to_html'
       from /usr/lib/ruby/1.8/td2planet/writer.rb:29:in `output_html'
       from /usr/lib/ruby/1.8/pathname.rb:798:in `open'
       from /usr/lib/ruby/1.8/pathname.rb:798:in `open'
       from /usr/lib/ruby/1.8/td2planet/writer.rb:28:in `output_html'
       from /usr/lib/ruby/1.8/td2planet/runner.rb:56:in `run'
       from /usr/lib/ruby/1.8/td2planet/runner.rb:30:in `main'
       from /usr/lib/ruby/1.8/td2planet/runner.rb:28:in `each'
       from /usr/lib/ruby/1.8/td2planet/runner.rb:28:in `main'
       from /usr/bin/td2planet:10
(snip)

と思ったら、パス名が日本語なのにURIでエンコードされてないからか。はてダのRSSの出力もそうなんだが、そもそも URI内で日本語名なんか使って くれるなと思う。とはいえ、日本語ドメイン名とか使えるようになるとますますこういう問題は今後増えてくると思われるので、エンコードしておくことにした。

といっても、/usr/lib/ruby/1.8/td2planet/formatter.rbを一行修正するだけの簡単なお仕事。

diff --git a/td2planet-0.1.0/lib/td2planet/formatter.rb b/td2planet-0.1.0/lib/td
2planet/formatter.rb
index 221d584..ff2b2db 100644
--- a/td2planet-0.1.0/lib/td2planet/formatter.rb
+++ b/td2planet-0.1.0/lib/td2planet/formatter.rb
@@ -120,7 +120,7 @@ module TD2Planet
     end

     def relative_path_to_absolute_uri(attr_value, base_uri)
-      uri = URI.parse(attr_value)
+      uri = URI.parse(URI.escape(attr_value))
       if uri.scheme.nil?
         URI.parse(base_uri) + uri
       else

確認してみたらSidでもそのままみたいなのでBTSしておいた。