最近、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 サイトの他の関連記事を参照してください。