2013-07-11 13 views
1

У меня есть следующий Рубиновый скрипт:Рубин скрипт не работает с странными ошибками о Highline библиотеке

begin 
     puts "What is the password? " 
     the_pass = ask("") { |q| q.echo = "*" } 
end while the_pass == nil || the_pass == "\n" || the_pass == "" 

И он терпит неудачу, когда я ударил Enter:

неопределенного метод default_external' for REXML::Encoding:Module /Library/Ruby/Gems/1.8/gems/highline-1.6.19/lib/highline.rb:621:in сказать» /Library /Ruby/Gems/1.8/gems/highline-1.6.19/lib/highline.rb:914:in get_response' /Library/Ruby/Gems/1.8/gems/highline-1.6.19/lib/highline.rb:259:in спросить»

Похоже, что это не удается при проверке ввода для the_pass, но я не могу понять ошибку, как они связаны?

Благодаря

ответ

0

Это плохая обработка ошибок в HighLine драгоценный камень Руби < 1.9.

Нарушитель линия (идентифицироваться вашим сообщением об ошибке) является:

statement.force_encoding(Encoding.default_external) if defined?(Encoding) && Encoding.default_external 

Вы можете справиться с этим путем:

  1. Удаление любых include REXML команд в скрипте. Это будет поддерживать связь REXML::Encoding с Encoding.

  2. Добавление следующей строки где-то в начале вашего скрипта:

    REXML::Encoding.instance_eval { def default_external; false; end }

    Эта линия будет препятствовать отсутствующий ошибка метода и предотвратит HighLine от попыток заставить кодировку, где он не должен.