R
Railway4mo ago
Yash

Possible to restart a specific deployment via API?

Hi there, Is it possible to restart a specific deployment with an API call? This is to save memory and CPU and free those up when there is no volume of requests.
39 Replies
Percy
Percy4mo ago
Project ID: N/A
Brody
Brody4mo ago
does the cron template not fit your usecase for this?
Yash
YashOP4mo ago
It does, but it sometimes restarts even when there is an ongoing job, and that job is impacted want to restart when there is no ongoing job.
Brody
Brody4mo ago
gotcha, do you know golang?
Yash
YashOP4mo ago
not right now, but i think i might be familiar
Brody
Brody4mo ago
it's simple syntax, read the source code of the cron template, it's golang
Yash
YashOP4mo ago
ah okay, is there a repo where i can find this
Yash
YashOP4mo ago
GitHub
Build software better, together
GitHub is where people build software. More than 100 million people use GitHub to discover, fork, and contribute to over 420 million projects.
From An unknown user
From An unknown user
From An unknown user
Yash
YashOP4mo ago
const serviceInstanceRedeployMutation = mutation serviceInstanceRedeploy($environmentId: String!, $serviceId: String!) { serviceInstanceRedeploy(environmentId: $environmentId, serviceId: $serviceId) } ; const getLatestDeploymentQuery = query Deployments($first: Int, $input: DeploymentListInput!) { deployments(input: $input, first: $first) { edges { node { id status } } } } ; could you please confirm if i'm running this correctly? i've noticed i can only restart the service once while i do get a 200, the services not really restart, is this something to do with deployment id? async function redeployService(serviceId: string): Promise<{ serviceId: string; status: string; error?: string }> { if (!RAILWAY_API_ENDPOINT) { throw new Error('RAILWAY_BACKEND_URL is not defined in the environment variables'); } try { const latestDeploymentId = await getLatestDeploymentID(serviceId); const response = await fetch(RAILWAY_API_ENDPOINT, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': Bearer ${process.env.RAILWAY_API_TOKEN}, }, body: JSON.stringify({ query: serviceInstanceRedeployMutation, variables: { environmentId: process.env.RAILWAY_ENVIRONMENT_ID, serviceId: serviceId, deploymentId: latestDeploymentId, }, }), }); if (!response.ok) { const errorText = await response.text(); throw new Error(HTTP error! status: ${response.status}, body: ${errorText}); } const data = await response.json(); if (data.errors) { throw new Error(JSON.stringify(data.errors)); } return { serviceId, status: 'redeployed' }; } catch (error: any) { console.error(Error redeploying service ${serviceId}:, error); return { serviceId, status: 'failed', error: error.message }; } }
Brody
Brody4mo ago
you want to restart the service, not redeploy it
Yash
YashOP4mo ago
i can confirm i'm using correct details in the backend ah okay, so this one? mutation deploymentRestart($id: String!) { deploymentRestart(id: $id) }
Brody
Brody4mo ago
yep
Yash
YashOP4mo ago
sigh, thanks man, i'll try with this
Brody
Brody4mo ago
sounds good maybe at some point it will be worth it to invest some time into your code so you dont have to keep restarting it to save memory?
Yash
YashOP4mo ago
Yes, i've tried doing multiple things, but it's apparently an issue with a package i'm using
Yash
YashOP4mo ago
Also, same issue, it restarts the first time i run the code after making changes,
const getLatestDeploymentQuery = `
query deployments($first: Int, $input: DeploymentListInput!) {
deployments(first: $first, input: $input) {
edges {
node {
id
status
createdAt
}
}
}
}
`;

const deploymentRestartMutation = `
mutation deploymentRestart($id: String!) {
deploymentRestart(id: $id)
}
`;
const getLatestDeploymentQuery = `
query deployments($first: Int, $input: DeploymentListInput!) {
deployments(first: $first, input: $input) {
edges {
node {
id
status
createdAt
}
}
}
}
`;

const deploymentRestartMutation = `
mutation deploymentRestart($id: String!) {
deploymentRestart(id: $id)
}
`;
i tried restarting again, but services don't restart
No description
Yash
YashOP4mo ago
no errors, getting 200
No description
Yash
YashOP4mo ago
there a limit on how many times i can restart a service per hour or maybe minutes?
Brody
Brody4mo ago
no there is not
Yash
YashOP4mo ago
i guess there's something in the code then i'll figure out, thanks for all the help!
Brody
Brody4mo ago
no problem!
Yash
YashOP4mo ago
correctly gets response for deployments to restart. but deployments not restarted works fine when i call graphql api via postman. restarts fine as well
No description
No description
Brody
Brody4mo ago
how are you sure you are getting the correct deployment Id
Yash
YashOP4mo ago
it would show an error if deployment ids are correct, i printed and manually verified these ids too
Yash
YashOP4mo ago
No description
No description
Brody
Brody4mo ago
I just have the strangest feeling you are running redeploys for a service in some other project or environment
Yash
YashOP4mo ago
i have had that feeling too, but it looks like the ids are correct i'm printing as i run those and verified with the ones i have in my dashboard
Brody
Brody4mo ago
something is incorrect, otherwise it would work haha
Yash
YashOP4mo ago
next i'm fetching these dynamically based on service ids it would all fail if service ids were in correct
Brody
Brody4mo ago
think about this logically, if my cron template can restart your service, that narrows it down to it being a code issue on your side
Yash
YashOP4mo ago
i'm guessing some sort of caching? i can tell you it does 100% what it's supposed to when i call it via Postman
Brody
Brody4mo ago
wish I knew what the issue was though, sorry railway doesn't cache API calls, this is a coding error as proven by my cron template working
Yash
YashOP4mo ago
;_;
Brody
Brody4mo ago
I'm sorry I don't have an answer for you but this is 100% a code issue
Yash
YashOP4mo ago
yep pretty certain at this point, maybe nextjs caching i'll verify
Yash
YashOP4mo ago
yep just cleared the .next folder and it worked lol
No description
Yash
YashOP4mo ago
it's caching fixed! thanks man, sorry for so many "and a lot of irrlevant" questions
Brody
Brody4mo ago
awsome!
Want results from more Discord servers?
Add your server