ActionView::Template::Error (несовместимые кодировки символов: ASCII-8BIT и UTF-8) с португальскими бразильскими символами

Я пытаюсь развернуть приложение на сервере Ubuntu 14.02 с NGINX и PUMA, и когда я пытаюсь получить доступ к статическим страницам на сервере с символами на бразильском португальском языке и БЕЗ доступа к базе данных, страница не отображается, и появляется следующая ошибка зарегистрировано:

ActionView::Template::Error (несовместимые кодировки символов: ASCII-8BIT и UTF-8)

Я прочитал много сообщений/ответов об этой ошибке и перепробовал все.

Версия Ruby: ruby ​​2.1.3p242 (19 сентября 2014 г., редакция 47630) [x86_64-linux] Версия Rails: Rails 4.2.4

Локаль команды на сервере возвращает следующее:

LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

Мой application.rb содержит строку:

config.encoding = "utf-8"

Моя среда.rb содержит строки:

Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8

Я уже безуспешно помещал кодировку #: "utf-8" поверх моих файлов html.erb.


person Diego Senott    schedule 11.11.2015    source источник


Ответы (1)


Убедитесь, что исходные файлы-нарушители действительно используют кодировку UTF-8 (например, Textmate позволяет сохранять файл с использованием различных кодировок). Проверьте, действительно ли файл распознается системой как UTF, запуск file /path/to/something должен вернуть UTF-8.

Кроме того, если у вас всего несколько плохо закодированных строк, вы можете попробовать что-то вроде этого:

the_bad_string.dup.force_encoding("UTF-8")

Это должно преобразовать все, что было, в UTF.

person Dmitry Sokurenko    schedule 11.11.2015
comment
Здравствуйте, Дмитрий, спасибо, что нашли время помочь мне! Командный файл дает мне это: divulgue.html.erb: текст UTF-8 Unicode Force_encoding мне тоже не помог. И когда я возвращаю код the_bad_string.encoding.name, он также дает мне UTF-8!!! - person Diego Senott; 12.11.2015
comment
Если ваша строка происходит откуда-то за пределами divulgue.html.erb, проверьте также кодировку исходного файла. Например. У меня были такие проблемы, когда я пытался использовать строки, определенные в env.rb в представлении. Также проверьте, что возвращает the_bad_string.encoding, это UTF?. - person Dmitry Sokurenko; 12.11.2015
comment
Нет, это статическая страница со статическим содержимым, но с такими символами, как á ã ç. Если я удалю эти символы, страница будет отображаться нормально. Я использую строки, определенные в файле local_env.rb, для определения заголовка страницы, и они прекрасно работают даже с символом ú в нем??!!!??? Да, string.encoding.name возвращает UTF-8. - person Diego Senott; 12.11.2015
comment
Звучит странно. Попробуйте удалить все оскорбительные символы из файла, убедитесь, что это работает, а затем добавьте только одну португальскую строку, отредактируйте файл прямо на сервере, если это не работает, и force_encoding("UTF-8") тоже не работает, но португальские строки из внешних файлов работают хорошо — подумайте о том, чтобы переместить их все в файлы rails i18n .yml. - person Dmitry Sokurenko; 12.11.2015
comment
Я получил прямой доступ к своему серверу Puma (привязка rails s puma = IPADDRESS), и та же страница, к которой я пытаюсь получить доступ через NGINX, работала нормально! Я совсем потерялся сейчас! - person Diego Senott; 13.11.2015
comment
Выглядит невероятно, проверьте, одинаково ли вы запускаете свои экземпляры puma при работе за nginx и при запуске только puma. Проверьте, сохраняется ли проблема, если у вас одновременно запущены nginx и puma, а nginx взаимодействует с одним и тем же экземпляром puma, который работает нормально. - person Dmitry Sokurenko; 13.11.2015