How to fix 'ModuleNotFoundError: No module named 'mainpage' ' when starting gunicorn?

How to fix 'ModuleNotFoundError: No module named 'mainpage' ' when starting gunicorn?

好吧,我正在尝试启动 $ sudo docker-compose -f prod.yml up,当 Gunicorn 启动 gis worker 时收到错误 ModuleNotFoundError: No module named 'mainpage'

我的 wsgi.py 的路径是正确的,这是我的最后一个错误 :D,我已经修复了它。

好吧,我正确设置了我的 wsgi 路径。

我已经尝试 运行 通过 manage.py runserver 并且效果很好。 我已经尝试在 docker 之外通过 manage.py runserver 运行 它并且效果很好。

这是我的项目结构:

IRM
├── app
│   ├── backend
│   │   ├── api
│   │   ├── combinator
│   │   ├── crowler
│   │   ├── IRMback
│   │   │        ├── __init__.py
│   │   │        ├── settings.py
│   │   │        ├── urls.py
│   │   │        ├── views.py
│   │   │        ├── wsgi.py
│   │   ├── mainpage
│   │   ├── manage.py
│   │   └── ...
│   ├── frontend
│   │     └── ...
│   requirements
│   ├── base.txt
│   ├── local.txt
│   └── prod.txt
│   docker
│   ├── local
│             └── Dockerfile
│   ├── prod
│              └── Dockerfile
├── docker-compose.yml
└── prod.yml

这是我的prod.yml

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

这是我的Dockerfile

FROM python:buster

ENV PYTHONUNBUFFERED 1

COPY app /app

WORKDIR /app

RUN pip install -r requirements/prod.txt

至少,它是我 settings.py 的一部分,在我看来与我的问题相关:

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'

直到我将此路径写入我的 wsgi(IRMback.IRMback.wsgi.applicationin prod.yml),这是一个例外 ModuleNotFoundError: No module named 'IRMback'``(or IRMback.IRMback),具体取决于我尝试过的路径。

我除了它 运行ning 无一例外。

我应该在我的所有应用程序中添加 wsgi.py 还是什么?我在哪里可以读到它? 长时间 google 异常文本的搜索没有带来任何结果。

您的问题似乎是 IRMbackbackend 的混合体,有点令人困惑。

在 Dockerfile 中,尝试设置 WORKDIR /app/backend。然后在gunicorn命令中去掉一个IRMback

gunicorn -w 4 IRMback.wsgi.application

这应该允许将位于 /app/backend/mainpage 的模块导入为 mainpage