mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-07-01 03:55:22 +02:00
refactor(deployments): enhance deployment worker and queue handling for cloud environments
- Refactored the deployment worker to create a no-op worker when Redis is disabled (e.g., IS_CLOUD), preventing BullMQ connection errors. - Updated queue initialization to use a no-op queue in cloud environments, ensuring compatibility and stability. - Improved error handling and logging for job processing in the deployment worker.
This commit is contained in:
@@ -1,15 +1,26 @@
|
||||
import { IS_CLOUD } from "@dokploy/server";
|
||||
import {
|
||||
execAsync,
|
||||
execAsyncRemote,
|
||||
} from "@dokploy/server/utils/process/execAsync";
|
||||
import type { Job } from "bullmq";
|
||||
import { Queue } from "bullmq";
|
||||
import { deploymentWorker } from "./deployments-queue";
|
||||
import { redisConfig } from "./redis-connection";
|
||||
|
||||
const myQueue = new Queue("deployments", {
|
||||
connection: redisConfig,
|
||||
/** No-op queue when Redis is disabled (e.g. IS_CLOUD). Avoids BullMQ connection errors. */
|
||||
const createNoopQueue = () => ({
|
||||
getJobs: () => Promise.resolve([] as Job[]),
|
||||
add: () =>
|
||||
Promise.resolve({ id: "noop", remove: () => Promise.resolve() } as Job),
|
||||
close: () => Promise.resolve(),
|
||||
on: () => {},
|
||||
});
|
||||
|
||||
const myQueue = !IS_CLOUD
|
||||
? new Queue("deployments", { connection: redisConfig })
|
||||
: (createNoopQueue() as unknown as Queue);
|
||||
|
||||
export const getJobsByApplicationId = async (applicationId: string) => {
|
||||
const jobs = await myQueue.getJobs();
|
||||
return jobs.filter((job) => job?.data?.applicationId === applicationId);
|
||||
@@ -20,19 +31,21 @@ export const getJobsByComposeId = async (composeId: string) => {
|
||||
return jobs.filter((job) => job?.data?.composeId === composeId);
|
||||
};
|
||||
|
||||
process.on("SIGTERM", () => {
|
||||
myQueue.close();
|
||||
process.exit(0);
|
||||
});
|
||||
if (!IS_CLOUD) {
|
||||
process.on("SIGTERM", () => {
|
||||
myQueue.close();
|
||||
process.exit(0);
|
||||
});
|
||||
|
||||
myQueue.on("error", (error) => {
|
||||
if ((error as any).code === "ECONNREFUSED") {
|
||||
console.error(
|
||||
"Make sure you have installed Redis and it is running.",
|
||||
error,
|
||||
);
|
||||
}
|
||||
});
|
||||
myQueue.on("error", (error) => {
|
||||
if ((error as any).code === "ECONNREFUSED") {
|
||||
console.error(
|
||||
"Make sure you have installed Redis and it is running.",
|
||||
error,
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export const cleanQueuesByApplication = async (applicationId: string) => {
|
||||
const jobs = await myQueue.getJobs(["waiting", "delayed"]);
|
||||
|
||||
Reference in New Issue
Block a user