【发布时间】:2021-12-16 04:06:18
【问题描述】:
我已经按照以下指南在 Ubuntu 20.04 服务器上设置了一个用于生产的测试 Django 环境:Deploying Django。
具体来说,我把Django项目放在了:
/opt/mydangoproject/
celery.py
celery_config.py
settings.py
etc
我还有一个额外的“覆盖”settings.py,它保存了“秘密”,特别是在这种情况下,它位于 celery 登录变量 RABBITMQ_BROKER:
/etc/opt/mydangoproject/
settings.py
我已经测试了这个配置,并且我已经确认 /etc/opt/mydangoproject/ 中的设置可用于 Django 环境,但是它们不会被 celery 拾取。我通过将 RABBITMQ_BROKER 登录变量放在主 settings.py (/opt/mydangoproject/) 中确认了这一点,并且 celery 能够访问它。
我的 celery.py 文件:
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mydangoproject.settings')
app = Celery('mydangoproject')
default_config = 'mydangoproject.celery_config'
app.config_from_object(default_config)
app.autodiscover_tasks()
我的 celery_config.py 文件:
from django.conf import settings
broker_url = settings.RABBITMQ_BROKER
worker_send_task_event = False
task_ignore_result = True
task_time_limit = 600
task_acks_late = True
worker_prefetch_multiplier = 10
worker_cancel_long_running_tasks_on_connection_loss = True
broker_pool_limit = None
/etc/opt/mydjangoproject/ 中的 settings.py :
from mydangoproject.settings import *
ALLOWED_HOSTS = [‘blah’]
RABBITMQ_BROKER = 'amqp://wabbitadmin:somepassword@somepassword@webserver:5672/mydangoproject'
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': ‘blah’,
'USER': ‘blah’,
'PASSWORD': ‘somepassword',
'HOST': 'localhost',
'PORT': 5432,
}
}
STATIC_ROOT = '/var/cache/mydangoproject/static/'
STATIC_URL = '/static/'
MEDIA_ROOT = '/var/opt/mydangoproject/media/'
MEDIA_URL = '/media/'
我的问题是:
- 为什么 celery 无法访问 RabbitMQ 登录变量。
- 如何解决?
【问题讨论】:
-
你是说mydjangoproject吗?