2010-01-03 21:57 | tag: nanoc
nanoc 3.0.2のauto compilerは、日本語を含むURLを正しく扱うことができません。非ASCII文字を含むURLはブラウザによりURL encodeされてサーバにリクエストが送信されますが、auto compilerは受け取ったリクエストのURL decodeを行っていないためです。 nanocのソースコードを修正することにより、この問題に対応しました。
日本語を含むURLを使うと、ファイルが存在するのにも関わらずエラーとなる
2010/01/03 23:40 追記
本件を 報告 したところ、すぐにnanoc本体が修正されました。将来リリースされるであろうnanoc 3.0.3ではこの問題は解決するかと思います。
http://projects.stoneship.org/trac/nanoc/ticket/89
なお、オフィシャルの修正ではURL decodeを行うのに Rack::Utils::unescape
が使用されています。
path = Rack::Utils::unescape(env[‘PATH_INFO’])
$GEM_HOME/gems/nanoc3-3.0.2/lib/nanoc3/extra/auto_compiler.rb
※$GEM_HOMEは、Linuxの場合 /usr/local/lib/ruby/gems/1.8
, /usr/lib/ruby/gems/1.8
など。
PATH_INFO環境変数から取得したパスの値に対してURL decodeを行うようにしました。URL decodeのコードはRuby添付のcgiライブラリの CGI::unescape
のものを利用しました。
--- auto_compiler.rb.org 2010-01-03 15:58:51.000000000 +0900 +++ auto_compiler.rb 2010-01-03 16:05:59.000000000 +0900 @@ -27,7 +27,7 @@ build_site # Find rep - path = env['PATH_INFO'] + path = env['PATH_INFO'].gsub(/\+/, ' ').gsub(/%([0-9a-fA-F]{2})/){ [$1.hex].pack("c") } reps = site.items.map { |i| i.reps }.flatten rep = reps.find { |r| r.path == path }