1
  • 的Apache2
  • WSGI
  • VHOST
  • python3

如果我嘗試設置envvars中的一部分我的wsgi.py我遇到問題,如果值包含非ascii字符。我如何傳遞一個 'unicode字符串' 到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) 

當我試圖做一個普通用戶或作爲root用戶時,它的工作完美無瑕。這似乎是由於os.environ確實接受傳入的Unicode值('Müüü'),並且不是嘗試對其進行編碼。 對於一個理由不理解的相同的似乎並不爲真時爲wsgi.py

部分對於第二個我以爲this question可以提供答案的運行,但在/etc/apache2/envvars設置LANG = de_DE.UTF-8沒有改變任何事情。

我試圖讀取大部分資源幾乎周圍的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

這個答案只是格雷厄姆鄧普爾頓最樂於助人的評論重申,所有的信用是他的。

這個問題最有可能的是結果在wsgi-processes環境中設置了locale設置。

如果您的mod_wsgi作爲其自己的專用deamon(因爲它最有可能應該)運行,您可以直接將它傳遞給所需的語言環境,從而避免由於您的分發可能處理apaches環境而導致的任何問題。

對於這方面的東西應該做的伎倆: WSGIDaemonProcess my-django-site lang='en_US.UTF-8' locale='en_US.UTF-8'

欲瞭解更詳細的說明,請閱讀Grahams excellent blog post並參考mod_wsgidocumentation

相關問題