Question

App platform: Node connection to managed Redis fails

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.


Submit an answer

This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Sign In or Sign Up to Answer

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

Want to learn more? Join the DigitalOcean Community!

Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in Q&A, subscribe to topics of interest, and get courses and tools that will help you grow as a developer and scale your project or business.

This comment has been deleted

Hello,

I had exactly the same issue with the same code sample from heroku.

The solution is to pass tls: {} to the redis config of each Queue instances:

code

const workQueue = new Queue(
  'NAME',
  'rediss://...',
  {
    redis: {
      tls: {},
    },
  },
);