erubis: `scan': неверная последовательность байтов в US-ASCII (ArgumentError)

Я столкнулся с этой ошибкой при рефакторинге небольшого веб-сервиса. Интересно, что на production-сервере все работает нормально.

.../erubis-2.7.0/lib/erubis/converter.rb:132:in `scan': invalid byte sequence in US-ASCII (ArgumentError)
        from .../erubis-2.7.0/lib/erubis/converter.rb:132:in `convert_input'
        from .../erubis-2.7.0/lib/erubis/converter.rb:36:in `convert'
        from .../erubis-2.7.0/lib/erubis/engine.rb:30:in `initialize'

Я запускаю apache с ruby ​​2.3.3p222 (2016-11-21) [x86_64-linux-gnu] на компьютере с Debian 9.

Вот мой код:

input = File.read('/somedir/chpwd.html')
eruby = Erubis::Eruby.new(input)

я добавил #encoding: utf-8 к вершине моего ruby-скрипта и искал сеть вверх и вниз, но не нашел решения.

1 ответ

Оказывается, проблема во входе. erubis пытается разобрать его как ASCII, но встречает некоторые неприятные символы и падает на его лице.

К сожалению, erubis не комментирует вопросы кодирования, и поэтому я нашел решение с помощью этого ответа: предоставляет ли Ruby способ для File.read() с указанной кодировкой?

Скажите ruby, какая кодировка данных во время чтения, примерно так:

File.read('/someir//chpwd.html', :encoding => 'utf-8')

И Erubis справится с этим правильно

Другие вопросы по тегам