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 справится с этим правильно