fix subprocess
This commit is contained in:
parent
ff139e3846
commit
599ec7b777
|
|
@ -168,7 +168,7 @@ export const _ = {
|
|||
const deploys = fs.readdirSync(dir(`/app/web/deploy`));
|
||||
|
||||
if (g.mode === "prod") {
|
||||
postMessage("restart");
|
||||
process?.send?.("restart");
|
||||
}
|
||||
|
||||
return {
|
||||
|
|
|
|||
38
pkgs/prod.ts
38
pkgs/prod.ts
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -5,6 +5,6 @@ export const restartServer = () => {
|
|||
if (g.mode === "dev") {
|
||||
$`bun ${g.mode}`;
|
||||
} else {
|
||||
postMessage("restart");
|
||||
process?.send?.("restart");
|
||||
}
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue