AgeofCreations
@AgeofCreations
Python, AsyncIO, AMQP

Как исправить ошибку ModuleNotFoundError: No module named 'mainpage' | Django + Gunicorn + docker-compose?

Привет. Запускаю $ sudo docker-compose -f prod.yml up, получаю ошибку из заголовка при запуске воркеров gunicorn.

Вот мой Dockerfile:

spoiler
FROM python:buster

ENV PYTHONUNBUFFERED 1

COPY app /app

WORKDIR /app

RUN pip install -r requirements/prod.txt


Вот мой prod.yml:
spoiler
version: '3'
volumes:
  pgdata:
services: 
  web:
    build:
      context: .
      dockerfile: docker/prod/python/Dockerfile
    volumes:
        - ./app:/app
    ports: 
      - "8000:8000"
    command: gunicorn -w 4 IRMback.IRMback.wsgi.application
      - postgres
  postgres:
    image: postgres:10
    environment: 
      POSTGRES_USER: postgres
      POSTGRES_DB: postgres
      POSTGRES_PASS: admin
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - 5433:5433

Вот структура каталога:
spoiler
IRM
├── app
│   ├── backend
│   │   ├── api
│   │   ├── combinator
│   │   ├── crowler
│   │   ├── IRMback
│   │   │        ├── __init__.py
│   │   │        ├── settings.py
│   │   │        ├── urls.py
│   │   │        ├── views.py
│   │   │        ├── <b>wsgi.py</b>
│   │   ├── mainpage
│   │   ├── manage.py
│   │   └── ...
│   ├── frontend
│   │     └── ...
│   requirements
│   ├── base.txt
│   ├── local.txt
│   └── prod.txt
│   docker
│   ├── local
│             └── Dockerfile
│   ├── prod
│              └── Dockerfile
├── docker-compose.yml
└── prod.yml


Вот кусок settings.py
spoiler
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',

    'rest_framework',
    'rest_framework.authtoken',
    'rest_auth',
    'allauth',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.vk',
    'allauth.socialaccount.providers.google',
    'allauth.account',
    'rest_auth.registration',
    'corsheaders',

    'mainpage',
    'combinator'
]
WSGI_APPLICATION = 'IRMback.wsgi.application'


Вне докера через manage.py runserver запускается нормально.
В другом конфиге докера через тот же manage.py runserver запускается тоже нормально. То есть, смею предположить что дело в Gunicorn.

Изначально, была такая же ошибка, но про модуль IRMback. Исправил, прописав текущий путь. IRMback.IRMback.wsgi.application в prod.yml. Мне нужно пихать по wsgi в каждый апп? Где почитать об этом? Продолжительный гуглёж ошибки удовлетворительных результатов не дал.
  • Вопрос задан
  • 3016 просмотров
Решения вопроса 1
AgeofCreations
@AgeofCreations Автор вопроса
Python, AsyncIO, AMQP
Проблема решена. Оказывается, причина была в моём Dockerfile.
Оказывется, особенность Gunicorn такова, что WORKDIR должна вести туда же, где находится manage.py.

Так, что путём исправления WORKDIR /app наWORKDIR /app/backend
и удаления одного IRMbackиз prod.yml, проблема решилась.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Stierlitz007
@Stierlitz007
Спустя 3 года кому-то и пригодилось) Когда случайно забыл дописать эти строчки и 3 часа искал в инете пока не попал на этот пост)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы