ホームページ  >  記事  >  バックエンド開発  >  uWSGIエンコード問題の解決方法を詳しく解説

uWSGIエンコード問題の解決方法を詳しく解説

高洛峰
高洛峰オリジナル
2017-03-26 10:09:152412ブラウズ

最近、Flaskで書いたアプリケーションをSupervisor+uWSGI経由で公式サーバーにデプロイした際にエラーが発生したので、関連情報を探してようやく解決したので、以下の記事で主にコーディングを紹介していきたいと思います。 uWSGI を解決する 問題に関連する情報については、困っている友人が参照できます。

問題が見つかりました

最近、仕事で Flask で書かれたアプリケーションを Supervisor+uWSGI 経由で公式サーバーにデプロイするときに、次のようなエラーが発生しました:

Unable to print the message and arguments – possible formatting error.

または

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

興味深いはい。 , Python 環境で直接実行する場合、そのようなエラーは発生しません。この方法で uwsgi uwsgi.ini を使用して実行することも通常です。

Unicodeのサポートが不十分なため、Python2ではこの種のエラーがよく発生しますが、私のプログラムはすべてPython3で書かれているため、このようなエラーは二度と発生しないはずです。さらに、すべての Python ファイルの最初の行にはエンコーディングが設定されています:

# -*- coding: utf-8 -*-

私の環境は次のとおりです:

  • Ubuntu 16.04.1 LTS

  • Python 3.5.2

  • uWSGI 2 . 0 .14 (in python3 pip)

  • Supervisor 3.3.1 (in python2 pip)

uwsgi.ini 設定ファイルの内容は次のとおりです:

[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

Python を使用するとそのようなエラーは発生しませんと uwsgi を直接接続しているため、環境のエンコード設定が問題の原因であると判断できます。

次のようにサーバーエンコーディングを表示します:

% 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

LANG および LANGUAGE 環境変数が設定されていないことがわかりました。

これら 2 つの環境変数の値は、uwsgi.ini で設定できます。テストした結果、実際に機能するのは LANGUAGE であることがわかりました。

りー

以上がuWSGIエンコード問題の解決方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。