2015/04/13

pry-rails がマルチバイト文字を含むヒストリを追加できない現象の対症療法

Rails Console で 'ほげ' とかのマルチバイト文字を入れると、ヒストリへの書き込みができなくて落ちる問題にぶちあたったので対症療法と調べたログ。

環境

  • OSX 10.10.3
  • rbenv 0.4.0
  • ruby-build 20150319zf
  • ruby 2.2.1
  • rails 4.2.0
  • pry 0.10.1
  • pry-rails 0.3.3

問題

日本語を含むコマンドを rails console で打つと以下のエラーで rails console が落ちる。

たぶんこれを踏んでる。

history.rb の save_to_file でどうやら保存できない模様

$ Pry.history.instance_eval {def hoge line; binding.pry end; @saver = method :hoge}
$ にほんご
$ Pry.history.instance_eval {@saver = method :save_to_file}
とかして無理矢理に pry で pry に割り込む。
そしたら line が ASCII-8bit になってるっぽい。
ので正しいエンコーディングに変換してしまえば保存できた。
.pryrc に書くとすると


とか。

これでヒストリへの保存時に落ちなくなったけれど、プロンプトはやっぱりおかしいまま。
どこか根幹の原因があるっぽい。
pry と pry-rails と rails の console 回りを軽く読んだけれど、 encoding 回りを触ってるのは見付けられなかったのでとりあえずの対症療法としてブログにまとめる。

読んでる時にちょっとおもしろかったものとか

  • Rails::Configuration に attr_accesor :x とかがあった。このパッと見 x が何か分からない感。
  • Pry.REPL#start ってメソッドがあって、 repl の loop を始めるメソッドらしいんだけれど
    • prologue
    • Input の handling
    • ensure epilogue
  • とかしていてなんかネーミングセンス良いなー、とか

根幹の原因

対症療法は分かったんだけれど、根幹の原因が分からないなー、ブログに書くかー、と思って再現する最小限の Gemfile を書いてたら、どうやら pry-rails そのものが問題じゃなくて rb-readline と組み合せるとダメみたい。
ちなみに再現する Gemfile は以下。

そのうちまた調べるかなー。

0 件のコメント:

コメントを投稿