【发布时间】:2019-06-22 19:19:33
【问题描述】:
我正在尝试使用 apache 和 mod_wsgi 在 Ubuntu 服务器上部署 django 项目。
我正在使用 python3 和 pipenv 来管理 venv。
环境变量PIPENV_VENV_IN_PROJECT=True,以便pipenv创建的venv位于项目文件夹内。
这是项目结构:
/srv/project
|
|-.venv # venv creted by pipenv
| |-bin
| |-...
|
|-Pipfile
|-Pipfile.lock
|
|-django_app
|
|-manage.py
|-...
|
|-django_app
|
|-settings.py
|-...
|-wsgi.py
Apache VirtualHost 配置(/etc/apache2/sites-available/000-default.conf):
<VirtualHost *:80>
<Directory /srv/project/django_app/django_app>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess django_app python-home=/srv/project/.venv python-path=/srv/project/django_app
WSGIProcessGroup django_app
WSGIScriptAlias / /srv/project/django_app/django_app/wsgi.py
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Apache 工作正常并且响应正确,直到我添加了配置的 WSGI 部分。然后它停止响应(所有请求都处于待处理状态)。
同样的错误信息在 apache 错误日志 (/var/log/apache2/error.log) 中不断重复 - 即使没有请求发送到服务器:
Current thread 0x00007f300f446bc0 (most recent call first):
[Tue Jan 29 15:43:58.899091 2019] [core:notice] [pid 16407:tid 139844391300032] AH00051: child pid 22818 exit signal Aborted (6), possible coredump in /etc/apache2
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'
似乎进程无法加载模块,可能是由于不正确的 venv 配置(不是真的使用 venv?)。但我尝试过的没有任何帮助。
我也将此代码添加到 wsgi.py,但没有帮助:
python_home = '/srv/project/.venv'
activate_this = python_home + '/bin/activate_this.py'
exec(open(activate_this).read(), dict(__file__=activate_this))
想法?谢谢!
【问题讨论】:
标签: django ubuntu virtualenv mod-wsgi pipenv