R
Railway5mo ago
jeff

ENOTFOUND redis.railway.internal

First time using railway. I'm on team plan which says it supports private networking. I have a simple nodejs application and a redis service. I've shared the redis variables as per the guide. project id is: 32ae1873-09b1-4c70-ae4b-ca9b93e854da is something broken or am i missing something? import Redis from "ioredis"; const redis = new Redis(process.env.REDIS_URL); REDIS_URL is shared from the service as ${{Redis.REDIS_PRIVATE_URL}}
Solution:
ioredis constructor expects family to be 0 no '0'
Jump to solution
52 Replies
Percy
Percy5mo ago
Project ID: 32ae1873-09b1-4c70-ae4b-ca9b93e854da
jeff
jeff5mo ago
i've updated to const redis = new Redis(process.env.REDIS_URL + "?family=0"); i still have the same error. does it matter that i started this project as hobby, where im told private networking doesn't work. and then imported things to team?
Brody
Brody5mo ago
nope, doesnt matter. have you added a 3 second sleep to your start script?
jeff
jeff5mo ago
lol no.
Brody
Brody5mo ago
please try that
jeff
jeff5mo ago
ok i got dragged away for a meeting. this is still no go. even with the 3second delay.
Brody
Brody5mo ago
nixpacks or dockerfile?
jeff
jeff5mo ago
i just pushing up a project. looking at the build logs, its using nixpack, which is ubuntu based. so i have a working nodejs application (locally). im just pushing it up to test railway. i usually use heroku.
Brody
Brody5mo ago
to be clear, you get ENOTFOUND redis.railway.internal when deployed to railway right?
jeff
jeff5mo ago
yeah
Brody
Brody5mo ago
can you show me how you have implemented the 3 second sleep?
jeff
jeff5mo ago
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); await delay(3000); just block. do this at the top before any dns lookups would happen
Brody
Brody5mo ago
please add the sleep to your start script instead
jeff
jeff5mo ago
oh so make my start script... sleep 3000; node index.js 3 maybe
Brody
Brody5mo ago
that would sleep for 50 minutes, sleep 3 is what you want
jeff
jeff5mo ago
ok its actually different now. /app/node_modules/ioredis/built/Redis.js:332 command.reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));
Brody
Brody5mo ago
what version of ioredis are you using?
jeff
jeff5mo ago
so do i need username and password for internal connection? i currently am...
Brody
Brody5mo ago
yes of course
jeff
jeff5mo ago
"ioredis": "^5.3.2",
Brody
Brody5mo ago
thats latest, so thats good what is REDIS_URL set to?
jeff
jeff5mo ago
redis://default:464lPFFidM4ll2K6olIBNHAgJgiG21ap@redis.railway.internal:6379
Brody
Brody5mo ago
it should be set to ${{Redis.REDIS_PRIVATE_URL}}
jeff
jeff5mo ago
const redis = new Redis(process.env.REDIS_URL + "?family=0"); yes it is... ${{Redis.REDIS_PRIVATE_URL}} i expanded it
Brody
Brody5mo ago
okay lets see your client code please
jeff
jeff5mo ago
sure... here is the stacktrace.
Brody
Brody5mo ago
please send the redis client code
jeff
jeff5mo ago
well its actually not the ioredis this time... it might be a similar issue with bull. not sure if your familiar with this.
jeff
jeff5mo ago
im just reading the docs here. it says everything in the second param is passed right to the iosredis constructor. https://github.com/OptimalBits/bull/blob/develop/REFERENCE.md#queue
GitHub
bull/REFERENCE.md at develop · OptimalBits/bull
Premium Queue package for handling distributed jobs and messages in NodeJS. - OptimalBits/bull
jeff
jeff5mo ago
so im also instantiating a queue. const fetchHTMLQueue = new Queue( "fetchHTML", process.env.REDIS_URL + "?family=0" ); and now its breaking on .getJobs(). await redis.set("block:https://www.centrecom.com/test/product", "404"); let alreadyQueued = (await fetchHTMLQueue.getJobs(["active", "waiting"])).map( (job) => job.data.url );
Brody
Brody5mo ago
okay I'll try to get a minimal reproducible example working with that library
jeff
jeff5mo ago
does it break for you also?
Brody
Brody5mo ago
I haven't started, currently eating dinner
jeff
jeff5mo ago
what country? im from Aus
Brody
Brody5mo ago
Canada
jeff
jeff5mo ago
Nice! looks like there is a bug in bull, i think i got it sorted
Brody
Brody5mo ago
what was it?
jeff
jeff5mo ago
so when you initilise a queue with bull, and pass in a redis connection string. it uses a url parser to pull it apart and then passes this to ioredis constructor
Solution
jeff
jeff5mo ago
ioredis constructor expects family to be 0 no '0'
jeff
jeff5mo ago
TypeError [ERR_INVALID_ARG_VALUE]: The property 'options.family' must be one of: 0, 4, 6. Received '0'
Brody
Brody5mo ago
ah it wants it to be a number
jeff
jeff5mo ago
anyhow... still not out of the woods. more issues. with redis. but ill have more of a play till i bother you again. but is definilty not the "point and click" i was expecting
Brody
Brody5mo ago
yeah very odd that ioredis defaults to ipv4
jeff
jeff5mo ago
ok so i have all this working now... thanks fro your help. do i need to stay on the team for private networking to work? or will my nodejs still be able to connect to redis on hobby?
Brody
Brody5mo ago
private networking is not limited to pro, but depending on your workload, you may need to stay on pro anyway
jeff
jeff5mo ago
when i do railway up, at what point can i kill that and it will still deploy?
Brody
Brody5mo ago
after its done uploading, you may be interested in the --detach flag
~> railway up --help
Upload and deploy project from the current directory

Usage: railway up [OPTIONS] [PATH]

Arguments:
[PATH]

Options:
-d, --detach Don't attach to the log stream
-s, --service <SERVICE> Service to deploy to (defaults to linked service)
-e, --environment <ENVIRONMENT> Environment to deploy to (defaults to linked environment)
--json Output in JSON format
-h, --help Print help
-V, --version Print version
~> railway up --help
Upload and deploy project from the current directory

Usage: railway up [OPTIONS] [PATH]

Arguments:
[PATH]

Options:
-d, --detach Don't attach to the log stream
-s, --service <SERVICE> Service to deploy to (defaults to linked service)
-e, --environment <ENVIRONMENT> Environment to deploy to (defaults to linked environment)
--json Output in JSON format
-h, --help Print help
-V, --version Print version
jeff
jeff5mo ago
yeah ok ill do -d is there any ETA's for sydney/melbourne regions?
Brody
Brody5mo ago
nope, but you upvote this forum post and with enough upvotes it will show the team that there is need for that region https://help.railway.app/feature-request/australia-region-4d98acbd
jeff
jeff5mo ago
done i'd say that needs a bit more circulation
Brody
Brody5mo ago
you are welcome to circulate it in a non intrusive way
Want results from more Discord servers?
Add your server
More Posts