python - 如何使用 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。
我不知道这到底是如何工作的,这似乎是虚拟环境的问题,但我很困惑。谢谢!
解决方案
推荐阅读
- python-3.x - Python DataFrame 日期转换
- java - ListView 没有填充数据
- android - 无法在android测试中访问外部库类
- javascript - 根据对象数组中的另一个属性查找属性的值
- git - git如何有效管理修改过的文件
- html - 如何让我的图片标题具有响应性?
- kotlin - 声明一个继承和初始化的对象
- reactjs - Jest 在 React App 中遇到了一个意外的令牌
- java - 如何创建一个参数化的 jar,其中参数由用户在运行时传递
- java - 如何使用 elasticsearch java api 连接位于不同服务器上的多个节点?