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