问题描述
当我运行命令时
flower -A main --port=5555
花不起作用,错误是:
> ImportError: cannot import name 'Command' from 'celery.bin.base'
有什么想法吗?主要是Django项目
解决方法
花总是落后于Celery,因此,如果您使用最新的Celery(它们重构了CLI),则可能会失败。坚持4.4.x,直到Flower追上来。
,如果您希望避免降低Celery工人的等级,一种解决方法是将主要版本的Celery单独运行早期版本的Flower。例如,在Docker容器中。 Flower只是监视您的经纪人,并且可以与您的Celery工人完全独立地运行。
Docker示例中的花
对于您的Django / Celery安装,运行Celery normally(无花):
celery -A main worker
对于Flower,请使用docker image mher/flower:0.9.5
,其内部使用Celery 4.4.6,并且为reported working。
以下是示例docker run
命令:
docker run --name flower -p 5555:5555 mher/flower:0.9.5 flower --broker=redis://redis-address
注意:您必须将代理地址更改为代理的dns可解析名称或ip。对于rabbitmq,请使用--broker=amqp://guest@rabbitmq-address:5672//
。有关高级选项,请参见url documentation。
一旦运行,Flower应该可以在Docker主机的IP:5555上获得
您也可以创建一个docker-compose文件,将run命令中的所有参数封装起来,然后使用docker-compose up -d
。
替代品
如果愿意,您还可以使用pip install flower redis celery==4.4.7
在不使用Docker 的情况下完成所有操作,只要它与主要Celery安装分开即可,然后使用{{1} }。一个单独的venv可能适用于此。
有关原始错误的将来更新,请参见github issue。
,在 celery 5.0.5 上工作时遇到同样的问题,所以切换到 celery 4.4.7 版本和花 0.9.7 并且它工作了。