LokkaでArgumentError: invalid byte sequence in US-ASCII

さくらVPSに入れてるDebianでLokkaが動かないみたいなことに遭遇した。
https://github.com/lokka/lokka

環境

nginx(1.4.1)
Ruby(2.1)
Passenger(4.0.33)
SMP Debian 3.2.46-1 x86_64 GNU/Linux

エラー内容

nginxには次のログを吐いてた。

2014/01/13 11:36:26 [error] 17289#0: *2698 upstream prematurely closed connection while reading response header from upstream,
client: 126.253.35.139, server: docs.jiikko.com, 
request: "GET / HTTP/1.1", upstream: "passenger:/tmp/passenger.1.0.17261/generation-0/request:", host: "docs.jiikko.com"

アプリのほうのエラー内容はタイトルにもあるように

ArgumentError at /
invalid byte sequence in US-ASCII
file: blank.rb location: =~ line: 96

だった。

バックトレースを見ると、lokka/lib/lokka/helpers/render_helper.rbの36行目で落ちてる。

 29     def render_any(name, options = {})      
 30       ret = ''
 31       templates = settings.supported_templates + settings.supported_stylesheet_templates +
 32         settings.supported_javascript_templates
 33       templates.each do |ext|
 34         out = rendering(ext, name, options)
 35         out.force_encoding(Encoding.default_external) unless out.nil?                                                                                     
 36         unless out.blank?
 37           ret = out
 38           break
 39         end
 40       end
 41       ret
 42     end

35行目でEncoding.default_externalに入っているエンコードに変換してるんだけど、
自分の環境では、Encoding.default_externalは、

[3] pry(#<Lokka::App>)> Encoding.default_external
=> #<Encoding:US-ASCII>

となっていて、文字コードが違うもの同士で正規表現しようとして落ちてる感じ。

ちなみに、Encoding.default_externalの中身はどこでセットされるかちょっと調べたらコマンドライン引数からとってくるらしい。
http://qiita.com/ongaeshi/items/12a0266ed89835674be8
(このDebinaでLokka実行中のEncoding.default_externalがどこでセットされてるかは謎。よくわかりません><)

プルリク!

自分は『エンコードなら黙ってUTF-8』みたいな感覚なのだが、
Encoding.default_external => "UTF-8" へのリプレイスはOSSとしてやっていいものなのか謎だなぁと。

対策

とりあえずUTF-8エンコードするようにした。

out.force_encoding(Encoding.default_external) unless out.nil?

out.force_encoding("UTF-8") unless out.nil?

動いた。