我正在尝试使用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))
想法?谢谢!
答案 0 :(得分:0)
问题已解决。我已经执行了几个步骤,但是我不确定其中哪个步骤至关重要:
pipenv --rm
pipenv install
重新创建venv。当然,这个新创建的venv具有降级的python版本此外,wsgi.py中的添加内容不必要,并且无助于解决问题:
python_home = '/srv/project/.venv'
activate_this = python_home + '/bin/activate_this.py'
exec(open(activate_this).read(), dict(__file__=activate_this))
希望这会对某人有所帮助。