运行fcgi脚本时丢失语言环境

时间:2012-02-22 01:24:18

标签: django apache encoding utf-8 fastcgi

我在运行django应用时面临编码问题。 我终于发现我的django应用程序没有设置区域设置。

奇怪的是我确实正确设置了envvars文件。在envvars中有这个:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_PID_FILE=/var/run/apache2.pid

## The locale used by some modules like mod_dav
export LANG=C
## Uncomment the following line to use the system default locale instead:
. /etc/default/locale

export LANG
locale

当我重新启动apache时,locale命令被执行,我得到了正确的LANG和LC _ *的fr_FR.UTF-8设置。

现在我设置了一个test.fcgi脚本:

#!/usr/bin/python
def myapp(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    from commands import getoutput
    return ["%s"%getoutput("locale")]

from flup.server.fcgi import WSGIServer
WSGIServer(myapp).run()

当我用

运行它时
sudo -u www-data test.fcgi

我也获得了正确的区域设置。 但是每当我通过Web浏览器访问脚本时,我都没有设置区域设置:

LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

为什么Apache有正确的设置,但我的fcgi脚本没有?

1 个答案:

答案 0 :(得分:1)

我通过在DefaultInitEnv LANG "en_US.UTF-8"中添加sites-available/default来解决这个问题。现在fcgi脚本告诉我UTF-8!