python - CentOS Python,mod_wsgi 无法正常工作
问题描述
我想部署 Djanogo Celery 应用程序,但遇到错误ModuleNotFoundError: No module named Xyz
,但是当我转到文件夹 where is manage.py
并运行时python3 manage.py runserver
,我可以看到服务器在本地端口 8000 上运行,但是
mod_wsgi (pid=25901): Failed to exec Python script file '/var/www/celeryEnv/vcs_celery/parsing_hub/parsing_hub/wsgi.py'.
mod_wsgi (pid=25901): Exception occurred processing WSGI script '/var/www/celeryEnv/vcs_celery/parsing_hub/parsing_hub/wsgi.py'.
Traceback (most recent call last):
File "/var/www/celeryEnv/vcs_celery/parsing_hub/parsing_hub/wsgi.py", line 16, in <module>
application = get_wsgi_application()
File "/var/www/celeryEnv/lib64/python3.6/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
django.setup(set_prefix=False)
File "/var/www/celeryEnv/lib64/python3.6/site-packages/django/__init__.py", line 19, in setup
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
File "/var/www/celeryEnv/lib64/python3.6/site-packages/django/conf/__init__.py", line 56, in __getattr__
self._setup(name)
File "/var/www/celeryEnv/lib64/python3.6/site-packages/django/conf/__init__.py", line 43, in _setup
self._wrapped = Settings(settings_module)
File "/var/www/celeryEnv/lib64/python3.6/site-packages/django/conf/__init__.py", line 106, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/usr/lib64/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 941, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'parsing_hub'
我已经配置了 virtualenvpython3 -m venv celeryEnv
我在 /etc/httpd/conf.d/celery.conf 中的配置是这样的:
<VirtualHost *:8099>
ServerName server
ServerAlias server
ServerAdmin admin@admin.com
DocumentRoot /var/www/vcs_celery/parsing_hub
WSGIDaemonProcess celeryEnv python-path=/var/www/celeryEnv/lib/python3.6/site-packages user=apache group=apache python-home=/var/www/celeryEnv
WSGIProcessGroup celeryEnv
WSGIScriptAlias / /var/www/vcs_celery/parsing_hub/parsing_hub/wsgi.py
ErrorLog /var/www/logs/error.log
CustomLog /var/www/logs/custom.log combined
Alias /static /var/www/celery/vcs_celery/parsing_hub/static
<Directory /var/www/celery/vcs_celery/parsing_hub/static>
Require all granted
</Directory>
</VirtualHost>
我认为 apache 无法识别 vierualenv 但因为我是设置 python wsgi 的初学者,所以我不知道该怎么做才能使其工作,欢迎提供任何帮助
编辑 我做了这个现在不能用 virtualenv 运行 Apache2我看到 apache 看到 vietualenv 但错误是一样的
编辑 2
pip freeze
amqp==2.5.2
Babel==2.7.0
beautifulsoup4==4.6.0
billiard==3.5.0.5
celery==4.1.0
cffi==1.13.2
cryptography==2.8
cssselect==1.1.0
Django==2.0.4
django-bootstrap3==10.0.1
django-celery-beat==1.1.1
flower==0.9.2
geopy==1.11.0
jusText==2.2.0
kombu==4.1.0
lxml==4.4.1
mod-wsgi==4.6.8
mysqlclient==1.3.12
nltk==3.2.5
numpy==1.17.4
pandas==0.20.3
parsel==1.4.0
pycparser==2.19
pyOpenSSL==17.5.0
python-dateutil==2.8.1
python-gitlab==1.1.0
pytz==2019.3
requests==2.12.4
selenium==2.53.1
six==1.13.0
SQLAlchemy==1.1.13
tornado==6.0.3
urllib3==1.25.7
vine==1.3.0
w3lib==1.21.0
**编辑 3 **
wsgi.py 文件的内容
"""
WSGI config for parsing_hub project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "parsing_hub.settings")
application = get_wsgi_application()
解决方案
如果您在开发环境中测试了语法并且一切正常,那么问题就在这里
WSGIDaemonProcess celeryEnv python-path=/var/www/celeryEnv/lib/python3.6/site-packages user=apache group=apache python-home=/var/www/celeryEnv
apache只看
python-path=/var/www/celeryEnv/lib/python3.6/site-packages
所以lib64中的任何模块都不会在 apache 中被识别
我通过处理所有模块/var/www/celeryEnv/lib64
找到了一种解决方法/var/www/celeryEnv/lib
现在 apache 可以在我自己的服务器上运行
WSGIDaemonProcess domain.com python-path=/home/user/app/env/lib/python3.6/site-packages:/home/user/app
推荐阅读
- python - Heroku deploy successful but i get application error
- amazon-web-services - Terraform import identifying resource has been deleted but it hasn't
- firebase - Firestore 中的快照侦听器指标究竟是如何工作的?
- php - WordPress removes special characters from a HTML form submissions
- python - Call Class inside unittest class Python
- react-native - React Navigation 5 处理模态、底部选项卡和堆栈
- sql - Processing time given by Oracle explain plan not matching execution time
- javascript - 尝试使用 vanilla javascript 向我的导航栏添加一个活动类
- java - Java stream Collection Map
- flutter - 如何在颤动中更改标签栏项目的大小