'NoneType' 对象没有属性 'autodiscover_tasks' if 运行 Django with Gunicorn
'NoneType' object has no attribute 'autodiscover_tasks' if run Django with Gunicorn
我有一个这样的 docker-compose
文件:
backend:
image: ${API_IMAGE}
env_file:
- .env
depends_on:
- db
volumes:
- ./data/server/static/:/usr/src/api/static
- ./data/server/uploads/:/usr/src/api/uploads
restart: always
frontend:
image: ${FRONTEND_IMAGE}
env_file:
- .env
ports:
- "80:80"
volumes:
- ./data/server/logs:/usr/src/web/logs
- ./configs/nginx:/etc/nginx/conf.d
- ./data/server/static/:/usr/src/app/static
- ./data/server/uploads/:/usr/src/app/uploads
restart: always
celery:
image: ${API_IMAGE}
env_file:
- .env
working_dir: /usr/src/api/
environment:
DJANGO_SETTINGS_MODULE: 'core.settings'
depends_on:
- redis
command: /bin/sh -c "celery -E -A core worker -l info"
beat:
image: ${API_IMAGE}
env_file:
- .env
working_dir: /usr/src/api/
environment:
DJANGO_SETTINGS_MODULE: 'core.settings'
depends_on:
- celery
command: /bin/sh -c "celery -A core beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler"
一切都通过 frontend
容器访问,该容器是一个使用代理向其他容器发送请求的 Nginx 应用程序。
后端是 运行 bash
文件中的 CMD,其中包含:
/usr/local/bin/gunicorn --access-logfile - -w 4 core.wsgi:application -b 0.0.0.0:80 &
一切都很好,运行宁。但是如果我访问管理站点,并尝试使用 Celery Beat 创建一个周期性任务,显示这个错误:
Traceback (most recent call last):
backend_1 | File "/usr/local/lib/python3.6/site-packages/kombu/utils/objects.py", line 42, in __get__
backend_1 | return obj.__dict__[self.__name__]
backend_1 | KeyError: '_modules'
backend_1 |
backend_1 | During handling of the above exception, another exception occurred:
...
File "/usr/local/lib/python3.6/site-packages/celery/app/base.py", line 684, in <listcomp>
backend_1 | for pkg in fixup.autodiscover_tasks()
backend_1 | AttributeError: 'NoneType' object has no attribute 'autodiscover_tasks'
但是,如果我 运行 backend
具有:
python manage.py runserver 80
没问题,没有例外。一切都很好!
当我 运行 使用 gunicorn 时,尝试从 Celery Beat 访问 Periodic Tasks 时显示错误。
我意识到当我 运行 python manage.py runserver
中有一行 manage.py 设置了 DJANGO_SETTINGS_MODULE
,但是如果我 运行 使用 gunicorn this没有为芹菜填充环境变量可以正常工作。
我在 backend
容器中设置了环境,一切正常!
.
.
.
backend:
environment:
DJANGO_SETTINGS_MODULE: 'core.settings'
.
.
.
我有一个这样的 docker-compose
文件:
backend:
image: ${API_IMAGE}
env_file:
- .env
depends_on:
- db
volumes:
- ./data/server/static/:/usr/src/api/static
- ./data/server/uploads/:/usr/src/api/uploads
restart: always
frontend:
image: ${FRONTEND_IMAGE}
env_file:
- .env
ports:
- "80:80"
volumes:
- ./data/server/logs:/usr/src/web/logs
- ./configs/nginx:/etc/nginx/conf.d
- ./data/server/static/:/usr/src/app/static
- ./data/server/uploads/:/usr/src/app/uploads
restart: always
celery:
image: ${API_IMAGE}
env_file:
- .env
working_dir: /usr/src/api/
environment:
DJANGO_SETTINGS_MODULE: 'core.settings'
depends_on:
- redis
command: /bin/sh -c "celery -E -A core worker -l info"
beat:
image: ${API_IMAGE}
env_file:
- .env
working_dir: /usr/src/api/
environment:
DJANGO_SETTINGS_MODULE: 'core.settings'
depends_on:
- celery
command: /bin/sh -c "celery -A core beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler"
一切都通过 frontend
容器访问,该容器是一个使用代理向其他容器发送请求的 Nginx 应用程序。
后端是 运行 bash
文件中的 CMD,其中包含:
/usr/local/bin/gunicorn --access-logfile - -w 4 core.wsgi:application -b 0.0.0.0:80 &
一切都很好,运行宁。但是如果我访问管理站点,并尝试使用 Celery Beat 创建一个周期性任务,显示这个错误:
Traceback (most recent call last):
backend_1 | File "/usr/local/lib/python3.6/site-packages/kombu/utils/objects.py", line 42, in __get__
backend_1 | return obj.__dict__[self.__name__]
backend_1 | KeyError: '_modules'
backend_1 |
backend_1 | During handling of the above exception, another exception occurred:
...
File "/usr/local/lib/python3.6/site-packages/celery/app/base.py", line 684, in <listcomp>
backend_1 | for pkg in fixup.autodiscover_tasks()
backend_1 | AttributeError: 'NoneType' object has no attribute 'autodiscover_tasks'
但是,如果我 运行 backend
具有:
python manage.py runserver 80
没问题,没有例外。一切都很好!
当我 运行 使用 gunicorn 时,尝试从 Celery Beat 访问 Periodic Tasks 时显示错误。
我意识到当我 运行 python manage.py runserver
中有一行 manage.py 设置了 DJANGO_SETTINGS_MODULE
,但是如果我 运行 使用 gunicorn this没有为芹菜填充环境变量可以正常工作。
我在 backend
容器中设置了环境,一切正常!
.
.
.
backend:
environment:
DJANGO_SETTINGS_MODULE: 'core.settings'
.
.
.