芹菜4.0.0:没有这样的运输:django

时间:2016-12-08 11:27:15

标签: python django celery

我按照Celery 4.0.0的“Django的第一步”教程: http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html

这一切都按预期工作。但是,如果我尝试将传输从AMQP更改为Django ORM,将其添加到settings.py的末尾:

CELERY_BROKER_URL = 'django://'

然后当我运行工作进程(celery -A proj worker)时,出现错误:

Traceback (most recent call last):
  File "/home/ac/src/proj/.pyenv/bin/celery", line 11, in <module>
    sys.exit(main())
  File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/__main__.py", line 14, in main
    _main()
  File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/bin/celery.py", line 326, in main
    cmd.execute_from_commandline(argv)
  File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/bin/celery.py", line 488, in execute_from_commandline
    super(CeleryCommand, self).execute_from_commandline(argv)))
  File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/bin/base.py", line 278, in execute_from_commandline
    return self.handle_argv(self.prog_name, argv[1:])
  File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/bin/celery.py", line 480, in handle_argv
    return self.execute(command, argv)
  File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/bin/celery.py", line 412, in execute
    ).run_from_argv(self.prog_name, argv[1:], command=argv[0])
  File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/bin/worker.py", line 221, in run_from_argv
    return self(*args, **options)
  File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/bin/base.py", line 241, in __call__
    ret = self.run(*args, **kwargs)
  File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/bin/worker.py", line 255, in run
    **kwargs)
  File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/worker/worker.py", line 99, in __init__
    self.setup_instance(**self.prepare_args(**kwargs))
  File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/worker/worker.py", line 120, in setup_instance
    self._conninfo = self.app.connection_for_read()
  File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/app/base.py", line 732, in connection_for_read
    return self._connection(url or self.conf.broker_read_url, **kwargs)
  File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/celery/app/base.py", line 808, in _connection
    'broker_connection_timeout', connect_timeout
  File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/kombu/connection.py", line 179, in __init__
    if not get_transport_cls(transport).can_parse_url:
  File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/kombu/transport/__init__.py", line 81, in get_transport_cls
    _transport_cache[transport] = resolve_transport(transport)
  File "/home/ac/src/proj/.pyenv/local/lib/python2.7/site-packages/kombu/transport/__init__.py", line 62, in resolve_transport
    raise KeyError('No such transport: {0}'.format(transport))
KeyError: u'No such transport: django'

我做错了什么?

2 个答案:

答案 0 :(得分:7)

您可以将其用作结果后端,但不能再作为经纪人使用。

支持的代理列表在此处on the celery project site.

在您关注的教程页面中,您可以选择使用django ORM作为结果后端:

  

扩展django-celery-results - 使用Django ORM / Cache作为   结果后端

     

django-celery-results扩展使用提供结果后端   Django ORM或Django Cache框架。

     

how to do that are located at this point on the page.的完整说明。

简短回答 - Django ORM不再是经纪人,it was removed in version 4.0

答案 1 :(得分:1)

没有名为django的传输,因此您无法使用django://。您可以使用的是RabbitMQ,如下所示:

CELERY_BROKER_URL = 'amqp://guest:guest@localhost:5672//'