Django + Apache + Ubuntu | ModuleNotFoundError: Нет модуля с именем 'myproject.settings'
Я запускаю приложение django на apache с использованием wsgi на ubuntu 18.04 aws ec2 instance. Я протестировал приложение django на сервере разработки, и оно работает нормально. Когда я запускаю его на apache, оно говорит, что произошла ошибка при запуске wsgi.py, нет модуля с именем myproject.settings. Я предполагаю, что это проблема с настройкой директории/apache не может получить доступ к файлу settings.py, но я новичок в apache, поэтому не знаю.
error.log:
wsgi.py:
"""
WSGI config for myproject 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/3.2/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = get_wsgi_application()
Карта каталога проекта django, исключая virtualenv:
./
├── myproject
│ ├── myproject
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ │ ├── __init__.cpython-36.pyc
│ │ │ ├── settings.cpython-36.pyc
│ │ │ ├── urls.cpython-36.pyc
│ │ │ └── wsgi.cpython-36.pyc
│ │ ├── asgi.py
│ │ ├── settings.py
│ │ ├── urls.py
│ │ └── wsgi.py
│ ├── myapp
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ │ ├── __init__.cpython-36.pyc
│ │ │ ├── admin.cpython-36.pyc
│ │ │ ├── apps.cpython-36.pyc
│ │ │ ├── models.cpython-36.pyc
│ │ │ ├── urls.cpython-36.pyc
│ │ │ └── views.cpython-36.pyc
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── migrations
│ │ │ ├── 0001_initial.py
│ │ │ ├── __init__.py
│ │ │ └── __pycache__
│ │ │ ├── 0001_initial.cpython-36.pyc
│ │ │ └── __init__.cpython-36.pyc
│ │ ├── models.py
│ │ ├── templates
│ │ │ └── widget.html
│ │ ├── tests.py
│ │ ├── urls.py
│ │ └── views.py
│ ├── db.sqlite3
│ ├── manage.py
│ └── static
Как мне решить эту проблему? Любые предложения будут высоко оценены!
Поскольку вы указываете 'myproject.myproject.settings', он ищет 'myapp' внутри myproject/myproject/myapp. Правильный путь будет 'myproject/myapp'
Таким образом, строка в wsgi.py должна быть следующей:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
В документации об этом говорится здесь: https://docs.djangoproject.com/en/4.1/howto/deployment/wsgi/modwsgi/
Где написано:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")