Apache/mod_wsgi/Django AJAX : 500 Внутренняя ошибка сервера: ModuleNotFoundError: Нет модуля с именем 'corsheaders'

Наша проблема связана с тем, что в проекте Django модуль corsheaders запущен через Apache/WSGI. Код работает нормально, используя локальный сервер Django, но при доступе через Apache (v.2.4.41) выдает 500 Internal Server Error. Если мы закомментируем приложение и промежуточное ПО в settings.py, сайт и другой код работает нормально (за исключением функциональности API, которая нуждается в corsheaders).

Мы исчерпали все доступные нам онлайн-ресурсы, поэтому заранее благодарим вас за совет удалить и переустановить django-cors-headers различными способами с помощью pip. Мы используем несколько других модулей, которые были установлены через этот шлюз без каких-либо проблем. Насколько мы можем судить, проблема связана с тем, что django wsgi не видит модуль.

Ниже я привел соответствующие журналы и настройки. Я также отметил места установки модуля corsheader.

Релевантные версии

  • django-cors-headers==3.13.0 (установлен по адресу: /home/geekfest/.local/lib/python3.8/site-packages)
  • django-cors-middleware==1.5.0
  • python==3.8.10
  • Django==4.1.2
  • Ubuntu==20.04.1

pythonpath: ['', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/home/geekfest/.local/lib/python3.8/site-packages', '/usr/local/lib/python3.8/dist-packages', '/usr/lib/python3/dist-packages']

**settings.py**

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'corsheaders',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.humanize',
    'stats',
]

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.common.CommonMiddleware',
    'stats.middleware.EventData',
]

ROOT_URLCONF = 'geekstats.urls'

CORS_ORIGIN_ALLOW_ALL = True

error.log

wsgi.py:

import os,sys

sys.path.append('/home/geekfest/geekstats/.../geekstats')
sys.path.append('/usr/lib/python3/dist-packages')
sys.path.append('/home/geekfest/.local/lib/python3.8/site-packages')

from django.core.wsgi import get_wsgi_application

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

application = get_wsgi_application()

Определение виртуального хоста в Apache .conf:

<VirtualHost *:80>
    ServerName xxx.com
    ServerAlias stats.xxx.com
    DocumentRoot /home/geekfest/.../geekstats/stats
    ErrorLog ${APACHE_LOG_DIR}/gferror.log
    CustomLog ${APACHE_LOG_DIR}/gfaccess.log combined
    WSGIDaemonProcess xxx.com python-path=/usr/lib/python3.8:/home/geekfest/geekstats/...geekstats/geekstats:/usr/lib/python3/dist-packages:/home/geekfest/.local/lib/python3.8/site-packages
    WSGIProcessGroup xxx.com

# Tell Apache what it should call when the “xxx” url alias is called
    WSGIScriptAlias / /home/geekfest/.../geekstats/geekstats/wsgi.py

# Tell Apache where to find the “static” subdir for the django site
     Alias /static /home/geekfest/.../stats/static

# Give Apache the location and permissions to where the wsgi.py file resides in>
    <Directory /home/geekfest/.../geekstats/geekstats>
        <Files wsgi.py>
            Require all granted
            Options +Indexes +ExecCGI
        </Files>
    </Directory>

# Give Apache the location and permissions to the static directory (images) for>
    <Directory /home/geekfest/.../stats/static>
        Order deny,allow
        Allow from all
        Require all granted
    </Directory>

</VirtualHost>

Убедитесь, что вы установили coreheaders. Для его установки вы можете попробовать pip install django-cors-headers. Если вы используете virtualenv для пакетов python, то вам необходимо указать в конфигурационном файле apache, где находится ваш virtualenv.

Ок, я понял. Я знал, что это должно быть проблемой пути, потому что модуль был там. Если вы посмотрите выше, то pip установил его в /home. WSGI работал из каталога /user. Как только я заставил Django сказать мне, где находятся мои другие рабочие библиотеки, я увидел проблему и принудительно установил библиотеку в /user.

Команда, направляющая pip на принудительную переустановку другой директивы, следующая:

sudo pip install --upgrade --force-reinstall --target /usr/lib/python3/dist-packages/ django-cors-headers
Вернуться на верх