首页 > 解决方案 > 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()

标签: pythonapachemod-wsgi

解决方案


如果您在开发环境中测试了语法并且一切正常,那么问题就在这里

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

推荐阅读