django-celery:TypeError:只能将元组(而不是“NoneType”)连接到元组

3

我最近开始使用rabbitmq和celery与django一起使用。我正在使用django-celery,django-celery-email和post office以异步方式发送电子邮件。 安装了所有这些包之后,我的settings.py看起来像:

INSTALLED_APPS = [
#other apps
'djcelery',
'djcelery_email',
'post_office'
]


# setup celery
import djcelery
djcelery.setup_loader()

# using post office as the default email backend 
EMAIL_BACKEND = 'post_office.EmailBackend'
# using djcelery's email backend as a backend for post office 

POST_OFFICE_BACKEND = 'djcelery_email.backends.CeleryEmailBackend'

POST_OFFICE = {
    'DEFAULT_PRIORITY' : 'now'
}

EMAIL_HOST = 'YOUR_HOST_NAME'
EMAIL_HOST_USER = "YOUR_HOST_USER_NAME"
EMAIL_PORT = 25  # default smtp port
EMAIL_HOST_PASSWORD = "YOUR_HOST_USER_PASSWORD"
EMAIL_USE_TLS = False
DEFAULT_FROM_EMAIL = 'testing@example.com'

当我尝试通过命令运行Django Celery时。
**python manage.py celeryd**

它报以下错误

Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "/home/ubuntu/edyodavirtual/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/home/ubuntu/edyodavirtual/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/ubuntu/edyodavirtual/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 206, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "/home/ubuntu/edyodavirtual/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 40, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/home/ubuntu/edyodavirtual/local/lib/python2.7/site-packages/djcelery/management/commands/celeryd.py", line 16, in <module>
    class Command(CeleryCommand):
  File "/home/ubuntu/edyodavirtual/local/lib/python2.7/site-packages/djcelery/management/commands/celeryd.py", line 20, in Command
    worker.get_options() +
TypeError: can only concatenate tuple (not "NoneType") to tuple

有人能帮我解决这个问题吗?


好奇一下,如果你使用 python manage.py celery worker 启动 celery 会发生什么?或者你已经解决了这个问题吗? - Will Keeling
同样的事情发生了,我也遇到了这个问题。 - Harry
2个回答

2

只需要在 "~/anaconda2/envs/test_django/lib/python3.6/site-packages/djcelery/management/commands/celery.py " 中的这些行注释掉,就像这样:

 14     #    options = (CeleryCommand.options +
 15     #           base.get_options() +
 16     #           base.preload_options)

然后它就可以工作了。

这对我有用,但是一个理想的解决方案是什么?你知道为什么会发生这种情况吗? - JDavies

1

我曾经遇到过同样的问题,即我试图通过djcelery包将celery与django集成。然后我阅读了许多博客和文档,并得出以下结论。

"Celery的早期版本需要一个单独的库才能与Django一起工作,但自从3.1版本以来,这不再是必须的。现在Django可以直接支持"

[Celery Notes][1]http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html

我没有使用djcelery,直接编写任务,它也可以正常工作!


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