incompatible character encodings: UTF-8 and ASCII-8BIT

Ошибку смешанных кодировок в Chef-шаблоне:

...
[2017-03-13T08:51:09+00:00] INFO: Processing template[/home/ec2-user/.bashrc] action create (linuxcmd::set_myprompt line 37)
================================================================================
Error executing action `create` on resource 'template[/home/ec2-user/.bashrc]'
================================================================================
Chef::Mixin::Template::TemplateError
------------------------------------
incompatible character encodings: UTF-8 and ASCII-8BIT
...

... получалась из-за использования в них (в template-файле *.erb) юникодовских символов и .

Никакие спеллы в виде попыток указания кодировки в самом  начале шаблона а-ля:

# encoding: UTF-8

или

# coding: UTF-8

или

<% # -*- coding: UTF-8 -* %>

или даже где-то добавить:

default['chef_client']['locale'] = 'en_US.UTF-8'
Encoding.default_external = Encoding::UTF_8
ENV['LC_ALL'] = 'en_US.UTF-8'

... не помогли.

Устал пытаться решить проблему (хотя ранее скрипт работал нормально и с таким шаблоном с utf8-символами внутри, но после многочисленных изменений перестал), нормальных решений на просторах интернета не обнаружено, найденные были решены банальным удалением UTF-8 или заменой на ASCII.

Итого, сделал аналогично, проблемный участок кода erb-шаблона:

        if [ $LASTOPER == "GOOD" ]; then
                tput setaf 2
                printf " "
        else
                tput setaf 1
                tput bold
                printf " "
        fi

был заменён на:

        if [ $LASTOPER == "GOOD" ]; then
                tput setaf 2
                printf " \342\234\223 "
        else
                tput setaf 1
                tput bold
                printf " \342\234\227 "
        fi

и вопрос снялся.

Кто подскажет, как можно таки решить, это проблема Ruby, Chef-клиента или чего-то ещё - буду признателен.

На будущее просто решил избегать UTF8 в Chef-скриптах, чего и вам советую.

 

Если вам помогла или просто понравилась статья - плюсаните/поделитесь, пожалуйста.

Добавить комментарий