diff --git a/examples/counter-serverless/src/server.ts b/examples/counter-serverless/src/server.ts index 01ff0b439..9dc17c030 100644 --- a/examples/counter-serverless/src/server.ts +++ b/examples/counter-serverless/src/server.ts @@ -3,5 +3,4 @@ import { registry } from "./registry"; registry.start({ runnerKind: "serverless", autoConfigureServerless: { url: "http://localhost:8080" }, - endpoint: "http://localhost:6420", }); diff --git a/packages/next-js/src/mod.ts b/packages/next-js/src/mod.ts index a99f3b14d..097609eaf 100644 --- a/packages/next-js/src/mod.ts +++ b/packages/next-js/src/mod.ts @@ -11,10 +11,6 @@ export const toNextHandler = ( // Configure serverless inputConfig.runnerKind = "serverless"; - // TODO: We probably want to move this to the registry for all serverless runners - // Metadata endpoint will not exist at 127.0.0.1:6420 - inputConfig.disableHealthCheck = true; - // Auto-configure serverless runner if not in prod if (process.env.NODE_ENV !== "production") { logger().debug( diff --git a/packages/rivetkit/src/registry/mod.ts b/packages/rivetkit/src/registry/mod.ts index 7d4f70a56..2dee1858d 100644 --- a/packages/rivetkit/src/registry/mod.ts +++ b/packages/rivetkit/src/registry/mod.ts @@ -71,6 +71,25 @@ export class Registry { // Promise for any async operations we need to wait to complete const readyPromises = []; + // Disable health check if using serverless + // + // This is because the endpoint will not be configured until we receive + // a serverless runner request, so we do not know what to health check + if (config.runnerKind === "serverless") { + logger().debug("disabling health check since using serverless"); + config.disableHealthCheck = true; + } + + // Auto-configure serverless runner if not in prod + if ( + process.env.NODE_ENV !== "production" && + config.runnerKind === "serverless" + ) { + if (inputConfig?.runEngine === undefined) config.runEngine = true; + if (inputConfig?.autoConfigureServerless === undefined) + config.autoConfigureServerless = true; + } + // Start engine if (config.runEngine) { logger().debug({ @@ -185,6 +204,7 @@ export class Registry { // Even though we do not use the returned ActorDriver, this is required to start the code that will handle incoming actors if (!config.disableActorDriver) { Promise.all(readyPromises).then(async () => { + logger().debug("starting actor driver"); driver.actor(this.#config, config, managerDriver, client); }); } @@ -220,6 +240,8 @@ export class Registry { } async function configureServerlessRunner(config: RunnerConfig): Promise { + logger().debug("configuring serverless runner"); + try { // Ensure we have required config values if (!config.runnerName) { @@ -290,10 +312,11 @@ async function configureServerlessRunner(config: RunnerConfig): Promise { }); } catch (error) { logger().error({ - msg: "failed to configure serverless runner", + msg: "failed to configure serverless runner, validate endpoint is configured correctly then restart this process", error, }); - throw error; + + // Don't throw, allow the runner to continue } } diff --git a/packages/rivetkit/src/remote-manager-driver/mod.ts b/packages/rivetkit/src/remote-manager-driver/mod.ts index 27d9e0226..63ab59875 100644 --- a/packages/rivetkit/src/remote-manager-driver/mod.ts +++ b/packages/rivetkit/src/remote-manager-driver/mod.ts @@ -109,7 +109,7 @@ export class RemoteManagerDriver implements ManagerDriver { }); } catch (error) { logger().error({ - msg: "failed to connect to metadata endpoint", + msg: "health check failed, validate the Rivet endpoint is configured correctly", endpoint, error: stringifyError(error), });