#Possible to restart a specific deployment via API?

51 messages · Page 1 of 1 (latest)

oblique forge
#

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.

rich bearBOT
#

Project ID: N/A

queen reef
#

does the cron template not fit your usecase for this?

oblique forge
#

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.

queen reef
#

gotcha, do you know golang?

oblique forge
#

not right now, but i think i might be familiar

queen reef
#

it's simple syntax, read the source code of the cron template, it's golang

oblique forge
#

ah okay, is there a repo where i can find this

queen reef
oblique forge
#

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 };
}
}

queen reef
#

you want to restart the service, not redeploy it

oblique forge
#

i can confirm i'm using correct details in the backend

#

ah okay, so this one?

mutation deploymentRestart($id: String!) {
deploymentRestart(id: $id)
}

queen reef
#

yep

oblique forge
#

sigh, thanks man, i'll try with this

queen reef
#

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?

oblique forge
#

Yes, i've tried doing multiple things, but it's apparently an issue with a package i'm using

#

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)
  }
`;

i tried restarting again, but services don't restart

#

no errors, getting 200

#

there a limit on how many times i can restart a service per hour or maybe minutes?

queen reef
#

no there is not

oblique forge
#

i guess there's something in the code then

#

i'll figure out, thanks for all the help!

queen reef
#

no problem!

oblique forge
#

correctly gets response for deployments to restart.

but deployments not restarted

works fine when i call graphql api via postman. restarts fine as well

queen reef
#

how are you sure you are getting the correct deployment Id

oblique forge
#

it would show an error if deployment ids are correct, i printed and manually verified these ids too

queen reef
#

I just have the strangest feeling you are running redeploys for a service in some other project or environment

oblique forge
#

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

queen reef
#

something is incorrect, otherwise it would work haha

oblique forge
#

next i'm fetching these dynamically

#

based on service ids

#

it would all fail if service ids were in correct

queen reef
#

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

oblique forge
#

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

queen reef
#

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

oblique forge
#

;_;

queen reef
#

I'm sorry I don't have an answer for you but this is 100% a code issue

oblique forge
#

yep pretty certain at this point, maybe nextjs caching

#

i'll verify

#

yep just cleared the .next folder and it worked lol

#

it's caching

#

fixed! thanks man, sorry for so many "and a lot of irrlevant" questions