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.application
in prod.yml
),这是一个例外 ModuleNotFoundError: No module named 'IRMback'``(or IRMback.IRMback)
,具体取决于我尝试过的路径。
我除了它 运行ning 无一例外。
我应该在我的所有应用程序中添加 wsgi.py 还是什么?我在哪里可以读到它?
长时间 google 异常文本的搜索没有带来任何结果。
您的问题似乎是 IRMback
和 backend
的混合体,有点令人困惑。
在 Dockerfile 中,尝试设置 WORKDIR /app/backend
。然后在gunicorn命令中去掉一个IRMback
:
gunicorn -w 4 IRMback.wsgi.application
这应该允许将位于 /app/backend/mainpage
的模块导入为 mainpage
。
好吧,我正在尝试启动 $ 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.application
in prod.yml
),这是一个例外 ModuleNotFoundError: No module named 'IRMback'``(or IRMback.IRMback)
,具体取决于我尝试过的路径。
我除了它 运行ning 无一例外。
我应该在我的所有应用程序中添加 wsgi.py 还是什么?我在哪里可以读到它? 长时间 google 异常文本的搜索没有带来任何结果。
您的问题似乎是 IRMback
和 backend
的混合体,有点令人困惑。
在 Dockerfile 中,尝试设置 WORKDIR /app/backend
。然后在gunicorn命令中去掉一个IRMback
:
gunicorn -w 4 IRMback.wsgi.application
这应该允许将位于 /app/backend/mainpage
的模块导入为 mainpage
。