首页 > 解决方案 > 如何使用 Apache2、mod_wsgi 和 Anaconda 运行 Django 应用程序?

问题描述

我正在尝试在 Ubuntu 中使用 Apache2、wsgi_mod、Anaconda 环境和 Python3.8 运行 django 应用程序。

当我运行 'sudo service apache2 start' 时,页面不断重新加载,并且相同的错误消息堆积在 '/var/log/apache2/error.log' 中。

Current thread 0x00007ff7b9507bc0 (most recent call first):
[Thu Apr 02 20:02:27.236780 2020] [core:notice] [pid 24024:tid 140701942709184] AH00051: child pid 29871 exit signal Aborted (6), possible coredump in /etc/apache2
[Thu Apr 02 20:02:27.237711 2020] [core:notice] [pid 24024:tid 140701942709184] AH00051: child pid 29872 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'

这些是 sys.prefix 和 sys.path

(my_env) manager@ubserv01:/etc/apache2/sites-available$ python -c "import sys; print(sys.prefix)"
/var/anaconda3/envs/my_env
(my_env) manager@ubserv01:/etc/apache2/sites-available$ python -c "import sys; print(sys.path)"
['', '/var/anaconda3/envs/my_env/lib/python38.zip', '/var/anaconda3/envs/my_env/lib/python3.8', '/var/anaconda3/envs/my_env/lib/python3.8/lib-dynload', '/var/anaconda3/envs/my_env/lib/python3.8/site-packages']

这是 mod_wsgi-express 模块配置输出:

(my_env) manager@ubserv01:/etc/apache2/sites-available$ mod_wsgi-express module-config
LoadModule wsgi_module "/var/anaconda3/envs/my_env/lib/python3.8/site-packages/mod_wsgi/server/mod_wsgi-py38.cpython-38-x86_64-linux-gnu.so"
WSGIPythonHome "/var/anaconda3/envs/my_env"

这是我的 /etc/apache2/sites-available/djangoProject.conf:

LoadModule wsgi_module /var/anaconda3/envs/my_env/lib/python3.8/site-packages/mod_wsgi/server/mod_wsgi-py38.cpython-38-x86_64-linux-gnu.so

WSGIPythonHome /var/anaconda3/envs/my_env

<VirtualHost *:80>
    ServerName opes.com
    ServerAdmin admin
    LogLevel warn
    DocumentRoot /var/www/opes/djangoProject

      <Directory /var/www/opes/djangoProject/djangoProject>
         <Files wsgi.py>
             Require all granted
         </Files>
    </Directory>

    WSGIPassAuthorization On
    WSGIDaemonProcess djangoProject python-path=/var/www/opes/djangoProject python-home=/var/anaconda3/envs/my_env
    WSGIProcessGroup djangoProject
    WSGIScriptAlias / /var/www/opes/djangoProject/djangoProject/wsgi.py

    ErrorLog "/var/log/apache2/djangoProject"
    CustomLog "/var/log/apache2/djangoProject" common
</VirtualHost>

/var/www/opes/djangoProject 是 manage.py 所在的目录。我启用此文件: sudo a2ensite

和 wsgi.py:

import os, sys

from django.core.wsgi import get_wsgi_application

sys.path.append("/var/www/opes/djangoProject")
sys.path.append("/var/www/opes/djangoProject/djangoProject")

os.environ.setdefault("LANG", "en_US.UTF-8")
os.environ.setdefault("LC_ALL", "en_US.UTF-8")

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoProject.settings')

application = get_wsgi_application()

我安装了 mod_wsgi:sudo apt-get install libapache2-mod-wsgi-py3 并启用它:sudo a2enmod wsgi。

我不知道这到底是如何工作的,这似乎是虚拟环境的问题,但我很困惑。谢谢!

标签: pythondjangoapacheanacondamod-wsgi

解决方案


这不是一个解决方案,但我真的推荐使用 Anaconda 作为环境的 Nginx + Gunicorn

一探究竟。

我的 git --> Nginx + Gunicorn


推荐阅读