在生产环境中运行Django-Celery

12

我建立了一个Django网络应用程序和一些Django-Piston服务。用户使用Web界面提交一些数据,该数据被POST到Web服务中,然后该Web服务使用Django-celery启动后台任务。

在manage.py中,开发环境下一切都运行正常。现在,我正在尝试将其移到适当的Apache服务器上进行生产。在生产中,网络应用程序和Web服务都可以正常工作,但我在以守护进程模式启动celeryd时遇到了严重问题。根据这些说明:http://docs.celeryproject.org/en/latest/tutorials/daemonizing.html#running-the-worker-as-a-daemon,我创建了一个celeryconfig.py文件,并将其放在/usr/bin目录中(这是我的Arch Linux服务器上celeryd的位置)。

CELERYD_CHDIR="/srv/http/ControllerFramework/"
DJANGO_SETTINGS_MODULE="settings"
CELERYD="/srv/http/ControllerFramework/manage.py celeryd"

但是当我尝试从命令行启动celeryd时,我会得到以下错误:

 "Missing connection string! Do you have "
celery.exceptions.ImproperlyConfigured: Missing connection string! Do you have    CELERY_RESULT_DBURI set to a real value?

我不确定该怎么做才能解决这个问题。以下是与此问题相关的我的settings.py部分内容:

BROKER_HOST = "localhost"
BROKER_PORT = 5672
BROKER_USER = "controllerFramework"
BROKER_PASSWORD = "******"
BROKER_VHOST = "localhost"

CELERY_RESULT_DBURI 是否在某处设置了? - S.Lott
我尝试将该值设置为以下内容:CELERY_RESULT_BACKEND = 'amqp'但是,当我尝试运行celeryd时,出现了错误:[2010-07-23 12:46:13,138: WARNING/MainProcess] raise KeyError("Missing hostname for AMQP connection.") [2010-07-23 12:46:13,138: WARNING/MainProcess] KeyError [2010-07-23 12:46:13,138: WARNING/MainProcess] : [2010-07-23 12:46:13,139: WARNING/MainProcess] 'Missing hostname for AMQP connection.'由于我遇到了这个错误,并且在django-celery的文档中找不到需要设置此值的任何地方,因此我认为我又做错了什么。 - Przemek
我猜在生产环境中,设置应该在 celeryconfig.py 文件中而不是 settings.py 中。如果是这种情况,那么 celeryconfig.py 文件应该添加在哪里? - Przemek
所以,即使我没看到任何相关文档要求,我已添加了CELRERY_RESULT_DBURI的设置代码行。现在当我运行celeryd时,我会遇到以下错误:“AMQP连接缺少主机名。”我已尝试调整设置文件,但无论我怎样操作都会出现该错误。 - Przemek
1个回答

8

我最终与django-celery项目负责人进行了交谈。有几点需要注意。首先,必须使用'manage.py celeryd'来运行celery。其次,在settings.py文件中,你必须导入'djcelery'。这个导入问题可能会在下一个版本中得到修复,但现在你必须这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接