【发布时间】:2016-09-29 12:14:56
【问题描述】:
我的开发服务器和生产服务器使用同一台服务器,使用 virtualenv。
我的问题是 celery 不知道要在哪个项目中运行任务。我不希望生产中的任务在我的开发服务器上运行,反之亦然。
我尝试使用不同的代理地址,但它不能正常工作:
生产主管脚本:
[program:production-celery]
command=/home/user/.virtualenvs/production.site.com/bin/celery --app=myproject.celeryconfig:app worker -E -n production --loglevel=INFO --without-mingle --without-gossip -Q default,celery
directory = /home/user/.virtualenvs/production.site.com/myproject
environment=DJANGO_SETTINGS_MODULE='myproject.settings.production'
发展:
[program:development-celery]
command=/home/user/.virtualenvs/development.site.com/bin/celery --app=myproject.celeryconfig:app worker -E -n development --loglevel=INFO --without-mingle --without-gossip -Q default,celery
directory = /home/user/.virtualenvs/development.site.com/myproject
environment=DJANGO_SETTINGS_MODULE='myproject.settings.development'
生产celeryconfig:
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.production')
app = Celery('myproject', broker='amqp://', backend='amqp')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
app.conf.update(
CELERY_ACCEPT_CONTENT = ['pickle', 'json'],
CELERY_TIMEZONE='Europe/Oslo',
CELERY_ENABLE_UTC=True,
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler',
CELERY_SEND_TASK_ERROR_EMAILS = True,
CELERY_SEND_ERROR_EMAILS = True,
CELERY_STORE_ERRORS_EVEN_IF_IGNORED = True,
CELERY_IGNORE_RESULT = False,
CELERY_TASK_RESULT_EXPIRES = 172800,
)
开发celeryconfig:
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.development')
app = Celery('myproject', broker='amqp://development:development@localhost/development')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
app.conf.update(
CELERY_ACCEPT_CONTENT = ['pickle', 'json'],
CELERY_TIMEZONE='Europe/Oslo',
CELERY_ENABLE_UTC=True,
CELERY_SEND_TASK_ERROR_EMAILS = False,
CELERY_STORE_ERRORS_EVEN_IF_IGNORED = True,
CELERY_IGNORE_RESULT = False,
)
有人知道为什么生产中的任务会在开发中运行吗?
【问题讨论】:
-
在我看来,您的生产和开发实例都使用相同的代码库,因为您对两个 celery 工作人员使用相同的目录。这是故意的吗?在我看来,使用与生产服务器相同的代码库的开发服务器并没有真正发挥作用,还是我忽略了一个特殊情况?
标签: django celery django-celery