Detaillierte Erläuterung der Lösungsmethode für uWSGI-Codierungsprobleme

高洛峰
Freigeben: 2017-03-26 10:09:15
Original
2465 Leute haben es durchsucht

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.
Nach dem Login kopieren

oder

UnicodeEncodeError: ‘ascii' codec can't encode characters in position 24-25: ordinal not in range(128)
Nach dem Login kopieren

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 -*-
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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"
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage