我有两个应用程序服务器(都有django应用程序)。两者都有芹菜工人跑步。 RabbitMQ服务器设置在第三个不同的服务器上。
当使用delay()
通过shell从两个应用程序的服务器中的任何一个执行任何测试任务时,它们可以正常执行。
如果从浏览器(通过ajax)从server1触发相同的任务,它再次正常工作。
但是对于server2(与server1具有相同的配置和代码),当从浏览器触发相同的任务时,它会给出[错误111]连接拒绝错误。
server1或server2上的一些已安装软件包是:
celery 3.1.18
amqp 1.4.9
django 1.8.5
有人可以帮我解决这个问题吗?谢谢!
错误跟踪如下:
File "../lib/python2.7/site-packages/celery/app/task.py" in delay 453. return self.apply_async(args, kwargs) File "../lib/python2.7/site-packages/celery/app/task.py" in apply_async 559. **dict(self._get_exec_options(), **options) File "../lib/python2.7/site-packages/celery/app/base.py" in send_task 353. reply_to=reply_to or self.oid, **options File "../lib/python2.7/site-packages/celery/app/amqp.py" in publish_task 305. **kwargs File "../lib/python2.7/site-packages/kombu/messaging.py" in publish 172. routing_key, mandatory, immediate, exchange, declare) File "../lib/python2.7/site-packages/kombu/connection.py" in _ensured 457. interval_max) File "../lib/python2.7/site-packages/kombu/connection.py" in ensure_connection 369. interval_start, interval_step, interval_max, callback) File "../lib/python2.7/site-packages/kombu/utils/__init__.py" in retry_over_time 246. return fun(*args, **kwargs) File "../local/lib/python2.7/site-packages/kombu/connection.py" in connect 237. return self.connection File "../lib/python2.7/site-packages/kombu/connection.py" in connection 742. self._connection = self._establish_connection() File "../lib/python2.7/site-packages/kombu/connection.py" in _establish_connection 697. conn = self.transport.establish_connection() File "../lib/python2.7/site-packages/kombu/transport/pyamqp.py" in establish_connection 116. conn = self.Connection(**opts) File "../lib/python2.7/site-packages/amqp/connection.py" in __init__ 165. self.transport = self.Transport(host, connect_timeout, ssl) File "../lib/python2.7/site-packages/amqp/connection.py" in Transport 186. return create_transport(host, connect_timeout, ssl) File "../lib/python2.7/site-packages/amqp/transport.py" in create_transport 299. return TCPTransport(host, connect_timeout) File "../lib/python2.7/site-packages/amqp/transport.py" in __init__ 95. raise socket.error(last_err)
答案 0 :(得分:0)
我说开始在调用server2上的延迟之前添加一些额外的日志记录调用,以确保你的celery配置在作为web服务器运行时是正确的(而不是manage.py shell实例)。听起来像gunicorn / uwsgi / apache / magic的一些启动脚本并没有加载实际配置芹菜所需的一些变量。或者它只是在这种情况下被某种方式覆盖。
真的很可怕的方法是在server2上运行你的web服务器作为manage.py runserver,然后在你打电话给.delay()
之前把PDB放在那里然后逛一逛。当你正在做的时候,当你所有的其他方式都失败时,并不是你想要普通互联网开放的东西......