rb-readlineをあれするびみょうなほうほう
git clone
したところのGemfile
に入ってていかんともしがたく〜というとき話。
[1] pry(main)> ���������
/.../lib/ruby/gems/2.2.0/gems/pry-0.10.1/lib/pry/history.rb:106:in `write': "\xE3" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)
となるやつ。rb-readlineがRuby 1.9以降では入出力をASCII-8BITで扱おうとしているっぽいのに対し、pryのヒストリファイルの読み書きはデフォルトに従う。これがくいちがった結果。
回避その一。ヒストリファイルを使わない。
pry wikiに従って書き込まないようにする。
# ~/.pryrc
Pry.config.history.should_save = false
これはそんなにアレじゃない。
回避その二。pryにムリヤリにでもASCII-8BITで書き込みさせる。
if defined?(RbReadline)
class Pry::History
class File < ::File
def self.open(path, mode, perm)
mode = "#{mode}:ascii-8bit" unless /:/ =~ mode
::File.open(path, mode, perm)
end
end
end
end
まあ、アレです。
回避その三。pryにムリヤリにでもreadlineを使わせる。
if defined?(RbReadline)
readline_so = "readline.#{RbConfig::CONFIG['DLEXT']}"
if $LOAD_PATH.detect { |d| File.exists?("#{d}/#{readline_so}") }
class Object
remove_const :Readline
end
require readline_so
end
end
アレです。
rb-readlineでないとしかたないっていう状況でなければrb-readline止めようよっていう話にするのがよいわけですが。