fix subprocess

This commit is contained in:
Rizky 2024-08-15 21:42:34 +07:00
parent ff139e3846
commit 599ec7b777
4 changed files with 23 additions and 26 deletions

View File

@ -168,7 +168,7 @@ export const _ = {
const deploys = fs.readdirSync(dir(`/app/web/deploy`));
if (g.mode === "prod") {
postMessage("restart");
process?.send?.("restart");
}
return {

View File

@ -5,7 +5,6 @@ import { dir } from "utils/dir";
import { g } from "utils/global";
g.main = {
old: null,
process: null,
restart: {
timeout: null as any,
@ -15,7 +14,7 @@ const main = g.main;
exitHook((signal) => {
if (main.process) {
main.process.terminate();
main.process.kill();
}
console.log(`Exiting with signal: ${signal}`);
});
@ -40,25 +39,24 @@ if (process.env.DATABASE_URL) {
}
const startMain = () => {
let mode = "started";
const worker = new Worker("pkgs/index.ts");
worker.onmessage = (event) => {
if (event.data === "restart") {
main.old = main.process;
setTimeout(() => {
if (main.old) {
main.old.terminate();
}
}, 1000);
main.process = startMain();
}
};
worker.addEventListener("close", (event) => {
console.log("Main worker being closed, thread-id: " + worker.threadId);
return Bun.spawn({
cmd: ["bun", "run", "pkgs/index.ts"],
cwd: process.cwd(),
stdout: "inherit",
stderr: "inherit",
ipc(message, subprocess) {
if (message === "restart") {
setTimeout(() => {
subprocess.kill();
}, 1000);
main.process = startMain();
}
},
onExit(subprocess, exitCode, signalCode, error) {
clearTimeout(main.restart.timeout);
main.restart.timeout = setTimeout(startMain, 500);
},
});
console.log(`Main worker`, mode, "thread-id:", worker.threadId);
return worker;
};
main.process = startMain();
setTimeout(() => new Promise(() => 0), 0);

View File

@ -1,4 +1,4 @@
import { Server, WebSocketHandler } from "bun";
import { Server, Subprocess, WebSocketHandler } from "bun";
import { Logger } from "pino";
import { RadixRouter } from "radix3";
import { PrismaClient } from "../../app/db/db";
@ -48,8 +48,7 @@ export const g = global as unknown as {
firebaseInit: boolean;
firebase: admin.app.App;
main: {
old: null | Worker;
process: null | Worker;
process: null | Subprocess;
restart: {
timeout: any;
};
@ -89,7 +88,7 @@ export const g = global as unknown as {
gz: Record<string, Uint8Array>;
};
createServer: (
arg: PrasiServer & { api: any; db: any },
arg: PrasiServer & { api: any; db: any }
) => (site_id: string) => Promise<PrasiServer & { api: any; db: any }>;
deploy: {
init: boolean;

View File

@ -5,6 +5,6 @@ export const restartServer = () => {
if (g.mode === "dev") {
$`bun ${g.mode}`;
} else {
postMessage("restart");
process?.send?.("restart");
}
};