【问题标题】:'connection refused' with Celery与 Celery 的“连接被拒绝”
【发布时间】:2015-06-02 14:05:36
【问题描述】:

我在 Ubuntu EC2 节点上有一个 Django 项目,我一直使用它来使用 Celery 设置异步。

我正在关注How to list the queued items in celery? 以及文档,以在命令行中试验 celery。

我已经能够在命令行上完成一项基本任务,使用:

(env1)ubuntu@ip-172-31-22-65:~/projects/tp$ celery --app=myproject.celery:app worker --loglevel=INFO

但是,如果我运行其他 celery 命令,如下所示:

(env1)ubuntu@ip-172-31-22-65:~/projects/tp$ celery inspect ping
Traceback (most recent call last):
  File "/home/ubuntu/.virtualenvs/env1/bin/celery", line 11, in <module>
    sys.exit(main())
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/celery/__main__.py", line 30, in main
    main()
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/celery/bin/celery.py", line 81, in main
    cmd.execute_from_commandline(argv)
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/celery/bin/celery.py", line 769, in execute_from_commandline
    super(CeleryCommand, self).execute_from_commandline(argv)))
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/celery/bin/base.py", line 307, in execute_from_commandline
    return self.handle_argv(self.prog_name, argv[1:])
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/celery/bin/celery.py", line 761, in handle_argv
    return self.execute(command, argv)
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/celery/bin/celery.py", line 693, in execute
    ).run_from_argv(self.prog_name, argv[1:], command=argv[0])
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/celery/bin/base.py", line 311, in run_from_argv
    sys.argv if argv is None else argv, command)
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/celery/bin/base.py", line 373, in handle_argv
    return self(*args, **options)
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/celery/bin/base.py", line 270, in __call__
    ret = self.run(*args, **kwargs)
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/celery/bin/celery.py", line 324, in run
    return self.do_call_method(args, **kwargs)
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/celery/bin/celery.py", line 346, in do_call_method
    callback=self.say_remote_command_reply)
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/celery/bin/celery.py", line 385, in call
    return getattr(i, method)(*args)
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/celery/app/control.py", line 100, in ping
    return self._request('ping')
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/celery/app/control.py", line 71, in _request
    timeout=self.timeout, reply=True,
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/celery/app/control.py", line 307, in broadcast
    limit, callback, channel=channel,
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/kombu/pidbox.py", line 283, in _broadcast
    chan = channel or self.connection.default_channel
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/kombu/connection.py", line 756, in default_channel
    self.connection
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/kombu/connection.py", line 741, in connection
    self._connection = self._establish_connection()
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/kombu/connection.py", line 696, in _establish_connection
    conn = self.transport.establish_connection()
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/kombu/transport/pyamqp.py", line 112, in establish_connection
    conn = self.Connection(**opts)
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/amqp/connection.py", line 165, in __init__
    self.transport = self.Transport(host, connect_timeout, ssl)
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/amqp/connection.py", line 186, in Transport
    return create_transport(host, connect_timeout, ssl)
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/amqp/transport.py", line 299, in create_transport
    return TCPTransport(host, connect_timeout)
  File "/home/ubuntu/.virtualenvs/env1/lib/python3.4/site-packages/amqp/transport.py", line 95, in __init__
    raise socket.error(last_err)
OSError: [Errno 111] Connection refused

已安装的python包:

(env1)ubuntu@ip-172-31-22-65:~/projects/tp$ pip freeze
amqp==1.4.6
anyjson==0.3.3
billiard==3.3.0.19
celery==3.1.17
Django==1.7.7
django-redis-cache==0.13.0
kombu==3.0.24
pytz==2015.2
redis==2.10.3
requests==2.6.0
uWSGI==2.0.10

/projects/tp/tp/celery.py

from __future__ import absolute_import

import os
import django
from celery import Celery
from django.conf import settings

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tp.settings')
django.setup()

app = Celery('hello_django')

# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

同样,在 redis.conf 中:

# Specify the path for the unix socket that will be used to listen for
# incoming connections. There is no default, so Redis will not listen
# on a unix socket when not specified.
#
  unixsocket /var/run/redis/redis.sock
  unixsocketperm 777

tp.settings.py:

# CELERY SETTINGS
BROKER_URL = 'redis://localhost:6379/0'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'

CACHES = {
    'default': {
        'BACKEND': 'redis_cache.RedisCache',
        'LOCATION': '/var/run/redis/redis.sock',
    },
}

编辑 2:

ubuntu@ip-172-31-22-65:~$ redis-cli ping
PONG
ubuntu@ip-172-31-22-65:~$ service redis-server status
redis-server is not running

编辑 3:

(env1)ubuntu@ip-172-31-22-65:~/projects/tp$ redis-cli ping
PONG
(env1)ubuntu@ip-172-31-22-65:~/projects/tp$ sudo service redis-server start
Starting redis-server: failed
(env1)ubuntu@ip-172-31-22-65:~/projects/tp$ service redis-server status
redis-server is not running

我做错了什么?

【问题讨论】:

    标签: python django celery


    【解决方案1】:

    我认为您正在使用rabbitmq 作为队列。所以检查一下

    sudo service rabbitmq-server status
    

    如果停止,

    sudo service rabbitmq-server start
    

    【讨论】:

    • (env1)ubuntu@ip-172-31-22-65:~/projects/tp$ sudo service rabbitmq-server status rabbitmq-server: unrecognized service--我试图设置这个使用 redis 关注 michal.karzynski.pl/blog/2014/05/18/…
    • 能不能展示一下BROKER URL等clery配置?
    • k 你能检查一下 redis 是否正常工作,服务 redis-server 状态吗?
    • 启动它,如果已安装。否则安装 redis-server
    • sudo apt-get install redis-server
    猜你喜欢
    • 2013-04-06
    • 2013-02-24
    • 1970-01-01
    • 2021-12-04
    • 2012-06-07
    • 2018-04-02
    • 2017-08-08
    • 2020-06-21
    • 2014-08-25
    相关资源
    最近更新 更多