Kürzlich ist ein Fehler aufgetreten, als eine in Flask geschriebene Anwendung über Supervisor+uWSGI auf dem offiziellen Server bereitgestellt wurde. Ich habe ihn schließlich durch die Suche nach relevanten Informationen gelöst, daher habe ich darüber nachgedacht, ihn mit allen zu teilen Um das Problem von uWSGI zu lösen, können Freunde, die relevante Informationen zu Codierungsproblemen benötigen, darauf verweisen.
Ein Problem gefunden
Ich bin kürzlich bei der Arbeit auf ein Problem gestoßen, als ich eine in Flask geschriebene Anwendung über Supervisor+uWSGI auf dem offiziellen Server bereitgestellt habe. Es tritt ein Fehler wie dieser auf:
Unable to print the message and arguments – possible formatting error.
oder
UnicodeEncodeError: ‘ascii' codec can't encode characters in position 24-25: ordinal not in range(128)
Interessanterweise gibt es keinen solchen Fehler, wenn er direkt in der Python-Umgebung ausgeführt wird. Es ist auch normal, uwsgi uwsgi.ini für die Ausführung auf diese Weise zu verwenden.
Aufgrund unzureichender Unicode-Unterstützung tritt dieser Fehler häufig in Python2 auf, aber alle meine Programme sind in Python3 geschrieben und solche Fehler sollten nicht noch einmal auftreten. Darüber hinaus ist bei allen Python-Dateien in der ersten Zeile die Codierung festgelegt:
# -*- coding: utf-8 -*-
Meine Umgebung ist wie folgt:
Ubuntu 16.04.1 LTS
Python 3.5.2
uWSGI 2.0.14 (in Python3 Pip)
Supervisor 3.3.1 (in Python2 Pip)
Der Inhalt der uwsgi.ini-Konfigurationsdatei lautet wie folgt:
[uwsgi] master = true wsgi-file = manage.py callable = app processes = 2 threads = 2 max-requests = 6000 chmod-socket = 664 uid = app gid = app buffer-size = 32768 venv = {project_dir}/venv ; http = 127.0.0.1:5001 logto = {project_dir}/logs/uwsgi.log
Aufgrund der Bei der direkten Verwendung von Python und Uwsgi tritt ein solcher Fehler nicht auf. Daher kann davon ausgegangen werden, dass das Problem durch die Umgebungscodierungseinstellung verursacht werden sollte.
Sehen Sie sich die Serverkodierung wie folgt an:
% locale LANG=C LANGUAGE=C: 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
Es wurde festgestellt, dass die Umgebungsvariablen LANG und LANGUAGE nicht festgelegt sind.
Die Werte dieser beiden Umgebungsvariablen können in uwsgi.ini festgelegt werden. Nach dem Testen habe ich herausgefunden, dass LANGUAGE tatsächlich funktioniert.
env LANG="en_US.UTF-8" env LANGUAGE="en_US.UTF-8"
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Lösungsmethode für uWSGI-Codierungsprobleme. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!