从终端和服务运行时,gunicorn 的行为有所不同

从终端和服务运行时,gunicorn 的行为有所不同

我的网站使用 nginx+gunicorn+django。

以下是我的 gunicorn.conf 文件:

description "Gunicorn daemon for Django project"

start on (local-filesystems and net-device-up IFACE=eth0)
stop on runlevel [!12345]

# If the process quits unexpectadly trigger a respawn
respawn

setuid django
setgid django
chdir /home/django

# export LC_ALL=en_US.UTF-8
# export LC_LANG=en_US.UTF-8
# export LANG=en_US.UTF-8

exec gunicorn \
    --name=eduwiki \
    --pythonpath=eduwiki \
    --bind=0.0.0.0:9000 \
    --log-level debug \
    --log-file /var/log/gunicorn/error_logs.log \
    --config /etc/gunicorn.d/gunicorn.py \
    eduwiki.wsgi:application

#    --access-logfile  /var/log/gunicorn/acclogs.log \

当我跑步时

service gunicorn start

当我更改到 dir 时/home/django,以下命令(与前一个配置文件中的代码相同)有效:

exec gunicorn     --name=eduwiki     --pythonpath=eduwiki     --bind=0.0.0.0:9000     --log-level debug     --log-file /var/log/gunicorn/error_logs.log     --config /etc/gunicorn.d/gunicorn.py     eduwiki.wsgi:application

但是第一个无法启动,当我删除配置文件中的日志记录部分时:exec gunicorn \ --name=eduwiki \ --pythonpath=eduwiki \ --bind=0.0.0.0:9000 \ --config /etc/gunicorn.d/gunicorn.py \ eduwiki.wsgi:application 使用service gunicorn start,服务运行。但它的行为与直接在终端中运行不同。

直接从终端运行,网页上显示的字符编码是正确的,如下所示:

数学(源自希腊语 μάθημα máthēma,“知识、研究、学习”)

但是当我使用服务运行 gunicorn 时,非 ASCII 字符的编码完全错误:

*

数学(源自希腊语 ?????? m?th?ma,意为“知识、研究、学习”)

    *

答案1

您的交互式终端会话通常会自动填充区域设置LC_ALL和语言设置LC_LANGLANG并且许多 SSH 客户端会通过从您的工作站转发这些环境变量来覆盖服务器默认值。

通常这些设置与系统默认值不同,当守护进程作为服务从启动脚本启动时,系统默认值会被使用。取消注释# export启动脚本中的行,并使用合适的设置填充环境。

相关内容