Как я могу передать 'строку Unicode' в os.environ в wsgi.py
264 просмотра
1 ответ
- apache2
- WSGI
- ВХост
- python3
Если я пытаюсь установить envvars как часть моего wsgi.py, я сталкиваюсь с проблемами, если значения содержат символы не ascii.
Traceback (most recent call last):
File "/home/vagrant/pyvenv/lib/python3.5/site-packages/absys/config/wsgi.py", line 13, in <module>
os.environ['DJANGO_TESTVAR'] = 'M\xc3\xb6\xc3\xb6\xc3\xb6\xc3\xb6'
File "/usr/lib/python3.5/os.py", line 730, in __setitem__
value = self.encodevalue(value)
File "/usr/lib/python3.5/os.py", line 799, in encode
return value.encode(encoding, 'surrogateescape')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-4: ordinal not in range(128)
Когда я пытаюсь сделать то же самое, что и обычный пользователь или пользователь root, он работает безупречно. Похоже, это связано с тем, что os.environ
он принимает переданное значение Unicode ('Müüü') и не пытается его кодировать. По непонятной причине то же самое, похоже, не соответствует действительности, когда выполняется как частьwsgi.py
На секунду я подумал , этот вопрос может дать ответ , но установка LANG = de_DE.UTF-8
в /etc/apache2/envvars
не меняет.
Я попытался прочитать большую часть ресурсов по django / wsgi / envvars и, в частности, по подходу Грэма Дамплетона, но ни один из них, похоже, не упоминал о проблемах кодирования.
Я предполагаю, что мой вопрос (управляемый моим пониманием до сих пор) сводится к следующему: «Что управляет os.environ
поведением кодирования и как влиять на него в процессе wsgi?
Если есть какая-либо дополнительная информация, которую я могу предоставить, чтобы помочь найти ответ, пожалуйста, дайте мне знать.
Автор: Elbenfreund Источник Размещён: 04.09.2019 08:24Ответы (1)
1 плюс
Этот ответ - всего лишь повторение самого полезного комментария Грэма Дамплтона. Вся заслуга его.
Эта проблема, скорее всего, является результатом неправильной locale
настройки в среде wsgi-процессов.
В случае, если вы mod_wsgi
работаете в качестве своего собственного выделенного демона (как это, скорее всего, следует), вы можете передать ему нужную локаль напрямую и, следовательно, избежать каких-либо проблем, связанных с тем, как ваш дистрибутив может обрабатывать среду Apache.
Для этого что - то вдоль этих линий следует сделать трюк:
WSGIDaemonProcess my-django-site lang='en_US.UTF-8' locale='en_US.UTF-8'
.
Для более сложных объяснений , пожалуйста , прочитайте Grahams отличного пост в блоге и обратитесь к mod_wsgi
«s документации .
Вопросы из категории :
- apache Заставьте XAMPP / Apache обслуживать файл вне htdocs
- apache Настроить Apache для локальной разработки / тестирования?
- apache Подстановочные знаки в файле хоста Windows
- apache Какой лучший движок XSLT для Perl?
- environment-variables Установка переменных среды в OS X
- environment-variables Есть ли команда для обновления переменных среды из командной строки в Windows?
- environment-variables Как получить и установить переменные окружения в C #?
- environment-variables Есть ли способ изменить переменные окружения другого процесса в Unix?
- mod-wsgi ошибка: не может начать новую тему
- mod-wsgi Перенаправить stdout и stderr в файл в Django с помощью wsgi
- mod-wsgi Проект Django (apache, mod_wsgi) не может импортировать пакеты пространства имен
- mod-wsgi Невозможно загрузить целевой WSGI-скрипт в качестве модуля Python
- python-3.5 Как использовать async / await в Python 3.5?
- python-3.5 Представления на основе классов в aiohttp
- python-3.5 Невозможно создать виртуальную среду с «колесом настройки setuptools не удалось с кодом ошибки 1»
- python-3.5 Как мне указать, что возвращаемый тип метода такой же, как и сам класс?
- django-wsgi Setting up Django on AWS Elastic Beanstalk: WSGIPath not found
- django-wsgi Django перестает работать с RuntimeError: populate () не реентерабелен
- django-wsgi Django :: OperationalError в / admin / login / не может открыть файл базы данных