10

I'm running a Flask app on Heroku (on the free tier) and running into some trouble when scheduling tasks using apply_async. If I schedule more than two tasks, I get a long stacktrace with the exception:

AccessRefused(403, u"ACCESS_REFUSED - access to exchange 'celeryresults' in vhost 'rthtwchf' refused for user 'rthtwchf'", (40, 10), 'Exchange.declare')

The odd thing is the first two tasks (before restarting all of my processes) always seem to complete with no issue.

A little bit of search engine sleuthing leads me to https://stackoverflow.com/questions/21071906/celery-cannot-connect-remote-worker-with-new-username which makes it looks like a permissions issue, but I'd assume that the Heroku CloudAMPQ service would have taken care of that already.

Any advice is appreciated!

Michael Marsh
  • 593
  • 3
  • 15
  • 1
    Let us have a look at it, email support@cloudamqp.com – Carl Hörberg Feb 10 '14 at 15:41
  • 1
    @CarlHörberg, public update? Experiencing this issue too, and judging by the upvotes there may be others. – Brad Koch Mar 19 '14 at 21:06
  • You're running out of connections. Make sure that you limit the connection pool and the number of workers. – Carl Hörberg Mar 25 '14 at 06:05
  • Have you tried tweaking celery's `BROKER_POOL_LIMIT` to be 1 as described in the [CloudAMQP docs](https://devcenter.heroku.com/articles/cloudamqp#celery)? You could also try reducing the concurrency of celery as suggested with `CELERYD_OPTS="--concurrency=1"`. This could prevent you from going over usage limits which might be your issue? – Nat Dempkowski May 05 '14 at 21:25
  • Do you really need to use the results backend? – Pedro Werneck Jun 04 '14 at 00:36

1 Answers1

1

I think your connections are exceeding 3 (free plan limit). Set the BROKER_POOL_LIMIT to 1 and it will work.

Farshid Ashouri
  • 16,143
  • 7
  • 52
  • 66