2014-03-31 102 views
0

我有Django应用程序,它使用Celery进行异步任务。另外,我在本地使用RabbitMQ,但在Heroku上,我尝试设置CloudAMQP插件。该应用程序启动时没有任何错误,但是发送到芹菜任何任务失败,出现错误:[错误111]拒绝连接这里是日志怎样的Heroku看起来像在开头:Heroku上的Celery&Cloudamqp引发错误:[Errno 111]连接被拒绝

heroku[celery.1]: Process exited with status 0 
heroku[celery.1]: Starting process with command `celery worker -A mysite -l info --beat` 
heroku[web.1]: Starting process with command `gunicorn mysite.wsgi` 
heroku[celery.1]: State changed from starting to up 
app[web.1]: 2014-03-31 15:10:13 [2] [INFO] Starting gunicorn 18.0 
app[web.1]: 2014-03-31 15:10:13 [2] [INFO] Listening at: http://0.0.0.0:51389 (2) 
app[web.1]: 2014-03-31 15:10:13 [2] [INFO] Using worker: sync 
app[web.1]: 2014-03-31 15:10:13 [7] [INFO] Booting worker with pid: 7 
heroku[web.1]: State changed from starting to up 
app[celery.1]: - ** ---------- .> transport: amqp://[email protected]:5672/xxx 
app[celery.1]: - ** ---------- .> results:  amqp 
app[celery.1]: -------------- [email protected] v3.1.10 (Cipater) 
app[celery.1]: --- * *** * -- Linux-3.8.11-ec2-x86_64-with-debian-squeeze-sid 
app[celery.1]: - ** ---------- .> app:   mysite:0x2846324123 
app[celery.1]: . tasks.add 
app[celery.1]: [tasks] 
app[celery.1]: -- ******* ---- 
app[celery.1]: . mysite.celery.debug_task 
app[celery.1]: - *** --- * --- .> concurrency: 4 (prefork) 
app[celery.1]: . tasks.a 
app[celery.1]: -------------- .> celery   exchange=celery(direct) key=celery 
app[celery.1]: . tasks.k 
app[celery.1]: --- ***** ----- [queues] 
app[celery.1]: [2014-03-31 17:10:16,332: INFO/Beat] beat: Starting... 
app[celery.1]: [2014-03-31 17:10:16,592: INFO/MainProcess] Connected to amqp://[email protected]:5672/xxx 
app[celery.1]: [2014-03-31 17:10:16,737: INFO/MainProcess] mingle: searching for neighbors 
app[celery.1]: [2014-03-31 17:10:17,785: INFO/MainProcess] mingle: all alone 
app[celery.1]: [2014-03-31 17:10:17,929: WARNING/MainProcess] /app/.heroku/python/lib/python2.7/site-packages/celery/fixups/django.py:233: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments! 
app[celery.1]: warnings.warn('Using settings.DEBUG leads to a memory leak, never ' 
app[celery.1]: /app/.heroku/python/lib/python2.7/site-packages/celery/fixups/django.py:233: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments! 
app[celery.1]: warnings.warn('Using settings.DEBUG leads to a memory leak, never ' 
WARNING/MainProcess] [email protected] ready. 

我有一个简单的任务,而调用失败:

@app.task(name='tasks.add') 
def add(x, y): 
    return x * y 

这里是Heroku的再次登录:

Internal Server Error: /configurator/perf_test 
app[web.1]: Traceback (most recent call last): 
app[web.1]:  response = wrapped_callback(request, *callback_args, **callback_kwargs) 
app[web.1]: File "/app/configurator/views.py", line 58, in perf_test 
[web.1]:  job_id = tasks.add.delay(2,3) 
[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/celery/app/task.py", line 453, in delay 
[web.1]:  return self.apply_async(args, kwargs) 
app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/celery/app/amqp.py", line 302, in publish_task 
app[web.1]:  **kwargs 
app[web.1]:  reply_to=reply_to or self.oid, **options 
app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 114, in get_response 
app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/kombu/connection.py", line 461, in _ensured 
app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/celery/app/task.py", line 555, in apply_async 
app[web.1]:  return self.connection 
app[web.1]:  return fun(*args, **kwargs) 
app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/kombu/connection.py", line 241, in connect 
app[web.1]:  routing_key, mandatory, immediate, exchange, declare) 
app[web.1]:  **dict(self._get_exec_options(), **options) 
app[web.1]:  interval_start, interval_step, interval_max, callback) 
app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/kombu/messaging.py", line 168, in publish 
app[web.1]:  self._connection = self._establish_connection() 
app[web.1]:  conn = self.transport.establish_connection() 
app[web.1]:  interval_max) 
app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/celery/app/base.py", line 323, in send_task 
app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/kombu/utils/__init__.py", line 230, in retry_over_time 
app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/kombu/connection.py", line 713, in _establish_connection 
app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/kombu/connection.py", line 754, in connection 
app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/amqp/connection.py", line 165, in __init__ 
app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/kombu/transport/pyamqp.py", line 111, in establish_connection 
app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/kombu/connection.py", line 373, in ensure_connection 
app[web.1]:  self.transport = create_transport(host, connect_timeout, ssl) 
app[web.1]: error: [Errno 111] Connection refused 
app[web.1]:  conn = self.Connection(**opts) 
app[web.1]:  raise socket.error(last_err) 
app[web.1]:  return TCPTransport(host, connect_timeout) 

settings.py的一部分:

DEBUG = True 
TEMPLATE_DEBUG = DEBUG 
import djcelery 
djcelery.setup_loader() 
WSGI_APPLICATION = 'mysite.wsgi.application' 

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'configurator', 
    'django.contrib.admin', 
    'kombu.transport.django', 
    'djcelery', 
) 

CELERY_IMPORTS = ("tasks",) 
import dj_database_url 
DATABASES = {'default': dj_database_url.config()} 

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') 
CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml'] 
CELERY_RESULT_BACKEND = "amqp" 
BROKER_POOL_LIMIT=1 
BROKER_URL = os.environ.get('CLOUDAMQP_URL') 

在此先感谢您。

回答

0

用-w旗限制gunicorn工人,用芹菜工人限制-c。使用免费的Little Lemur计划,您只能拥有3个并发连接。

相关问题