fastify / restartable

Restart Fastify without losing a request
MIT License
104 stars 8 forks source link

Hitting `/restart` endpoint does not restart with new plugins/routes. #9

Open ivanjeremic opened 2 years ago

ivanjeremic commented 2 years ago

Prerequisites

Issue

It says I can add dynamically routes and plugins without loosing request but something is not working for me. I also use autoload so I started this server and while the server is running I added a new route in one of my plugins, then I hit the endpoint /refresh (which is also part of the official example) to refresh the app without downtime and get the new route working but hitting /newroute does not work, all I get is a 404 with "Route GET:xx not found" but after a shutting down the server and starting again the new route works, so maybe I'm missing something here any idea?

import { start } from '@fastify/restartable'
import autoLoad from "fastify-autoload";

async function myApp (app, opts) {
   //register autload /plugins
   await app.register(autoLoad, {
     dir: join(__dirname, "plugins"),
     maxDepth: 1,
   });

  app.get('/restart', async (req, reply) => {
    await app.restart()
    return { status: 'ok' }
  })
}

const { stop, restart, listen, inject } = await start({
  protocol: 'http', // or 'https'
  // key: ...,
  // cert: ...,
  // add all other options that you would pass to fastify
  host: '127.0.0.1',
  port: 3000,
  app: myApp
})

const { address, port } = await listen()

console.log('server listening on', address, port)
mcollina commented 2 years ago

I can see why the readme could create confusion, but this module does not reload any code from disk. This module is useful if you are defining routes from a database and/or a config file.

If you want to hot-reload code, you would need to implement that yourself as for now. I'm currently exploring how to implement that feature with https://github.com/mcollina/fastify-isolate.

ivanjeremic commented 2 years ago

I can see why the readme could create confusion, but this module does not reload any code from disk. This module is useful if you are defining routes from a database and/or a config file.

If you want to hot-reload code, you would need to implement that yourself as for now. I'm currently exploring how to implement that feature with https://github.com/mcollina/fastify-isolate.

Ok I understand, yes it was confusing at first to me looking at the readme. However hope to see that working soon because reloading from disk without loosing requests would be very powerful.