1
  • apache2の
  • WSGI
  • VHOST
  • のpython3

私はパートとしてenvvarsのを設定しよう私のwsgi.pyの値に非アスキー文字が含まれていると問題に遭遇します。はどうすればwsgi.py内はos.environための 'ユニコード文字列' を渡すことができ

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) 

私は普通のユーザーと同じことをしようとすると、それは完璧に動作します。これは、os.environが渡されたユニコード値( 'Müüü')を受け入れ、ではなく、でエンコードしようとしているためです。同じことを理解されていない理由 は、私はthis questionは答えを提供することができますが/etc/apache2/envvarsLANG = de_DE.UTF-8を設定することを変更していないと思っ秒wsgi.py

の一部として実行したときに真ではないようです。

私はdjango/wsgi/envvarsのリソースのほとんどを読んでみました。特にGraham Dumpletons approach ですが、それらの中にはエンコードに関する問題はありません。

私は、私の質問(これまでの私の理解に支配)に沸く推測:任意の追加情報は、私が存在する場合 「何os.environのエンコードの動作を管理し、どのようにWSGIプロセスの中でそれに影響を与えるように

?その答えを見つけるのを支援するために提供することができます私に知らせてください。

+0

Linuxシステムによっては、 '' envvars''ファイルを無視するものがあります。 mod_wsgiのデーモンモードを使用していることを確認し、 '' WSGIDaemonProcess''ディレクティブの '' lang/locale''オプションを使用してください。参照:http://blog.dscpl.com.au/2014/09/setting-lang-and-lcall-when-using.htmlおよびhttp://modwsgi.readthedocs.io/en/develop/configuration-directives/ WSGIDaemonProcess.html –

答えて

1

この答えはグラハムDumpleton最も参考になったコメントだけの繰り返しである。すべてのクレジットは彼である。

この問題は、最も可能性の高い結果であり、 wsgi-processes環境で設定されたlocaleの設定が間違っています。

mod_wsgiが独自の専用デーモンとして実行されている場合は、必要なロケールを直接渡すことができます。そのため、ディストリビューションがどのようにしてapache環境を処理するかが問題にならないようにします。

これらの行には、次のようなトリックが必要です。 WSGIDaemonProcess my-django-site lang='en_US.UTF-8' locale='en_US.UTF-8'

詳細については、Grahams excellent blog postmod_wsgidocumentationを参照してください。

関連する問題