Report this

What is the reason for this report?

App platform: Node connection to managed Redis fails

Posted on March 22, 2021

I’m trying to set up an example app with a Node.js Express server, a managed DO Redis db, and a Node.js worker.

I’m using the server.js and worker.js code from Heroku’s “node-workers-example”. I’m deploying by pushing containers to a DO Container Registry.

I got this app working locally with docker-compose, using the docker hub’s official redis image as the db, but I can’t get it to connect to my managed DO redis db.

(The code linked above doesn’t catch errors, but if I catch them, I see this):

Error: read ECONNRESET
MaxRetriesPerRequestError: Reached the max retries per request limit (which is 20). Refer to "maxRetriesPerRequest" option for details.

The app itself appears to just hang and timeout when I post to the /job endpoint and try to make the first connection do the DB.

Things I’ve checked:

  • I attached the DB to my components in App Platform: it automatically added the env var DATABASE_URL, which I renamed to REDIS_URL to work with this code.
  • The managed redis db is accepting connections from all sources. In fact, I wouldn’t know how to restrict it to the app platform even if I wanted to!
  • The node package having this problem is bull, which uses ioredis under the hood to connect. I thought it might be a problem with TLS, but I was able to connect locally using ioredis with the same connection string (DATABASE_URL, which is rediss://default:<password, etc.>

I don’t know if the problem is specific to Node Bull here, but I don’t know how to begin debugging it beyond just logging as much as I can to the JS console.

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Start building today

From GPU-powered inference and Kubernetes to managed databases and storage, get everything you need to build, scale, and deploy intelligent applications.