mirror of
https://github.com/louislam/uptime-kuma.git
synced 2026-08-07 11:24:59 +00:00
Fix
This commit is contained in:
@@ -31,9 +31,20 @@ const tables = [
|
||||
|
||||
exports.up = async function (knex) {
|
||||
for (const table of tables) {
|
||||
await knex.schema.alterTable(table.name, (t) => {
|
||||
t.dropForeign("user_id");
|
||||
});
|
||||
try {
|
||||
await knex.schema.alterTable(table.name, (t) => {
|
||||
t.dropForeign("user_id");
|
||||
});
|
||||
} catch (error) {
|
||||
// Not sure why it only happens on Ubuntu 22.04 + Node.js 26
|
||||
// Can't DROP 'docker_host_user_id_foreign'; check that column/key exists
|
||||
console.error(`Error dropping foreign key for table ${table.name}:`, error);
|
||||
|
||||
const columns = await knex(table.name).columnInfo();
|
||||
console.error(`Schema for ${table.name}:`, JSON.stringify(columns, null, 2));
|
||||
|
||||
throw error;
|
||||
}
|
||||
|
||||
await knex.schema.alterTable(table.name, (t) => {
|
||||
t.dropColumn("user_id");
|
||||
|
||||
+20
-3
@@ -3,7 +3,7 @@ import { betterAuth, Session } from "better-auth";
|
||||
import * as Database from "./database.js";
|
||||
import { genSecret, log } from "../src/util";
|
||||
import { R } from "redbean-node";
|
||||
import { createPool } from "mysql2/promise";
|
||||
import { createPool, Pool } from "mysql2/promise";
|
||||
import BetterSqlite3Database from "better-sqlite3";
|
||||
import { username } from "better-auth/plugins";
|
||||
import { admin } from "better-auth/plugins";
|
||||
@@ -43,6 +43,21 @@ export async function authInternal() {
|
||||
return (await auth().$context).internalAdapter;
|
||||
}
|
||||
|
||||
let mariaDB: Pool;
|
||||
let sqlite: BetterSqlite3Database.Database;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
export async function closeAuthDatabase() {
|
||||
if (mariaDB) {
|
||||
await mariaDB.end();
|
||||
}
|
||||
if (sqlite) {
|
||||
sqlite.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new instance of better-auth
|
||||
* @throws Error if Database.initDataDir() has not been called
|
||||
@@ -57,7 +72,7 @@ function createAuthInstance() {
|
||||
}
|
||||
let database;
|
||||
if (Database.dbConfig.type.includes("mariadb")) {
|
||||
database = createPool({
|
||||
mariaDB = createPool({
|
||||
host: Database.dbConfig.host,
|
||||
port: Number(Database.dbConfig.port),
|
||||
database: Database.dbConfig.database,
|
||||
@@ -66,8 +81,10 @@ function createAuthInstance() {
|
||||
timezone: "Z",
|
||||
...(Database.dbConfig.socketPath ? { socketPath: Database.dbConfig.socketPath } : {}),
|
||||
});
|
||||
database = mariaDB;
|
||||
} else {
|
||||
database = new BetterSqlite3Database(Database.sqlitePath);
|
||||
sqlite = new BetterSqlite3Database(Database.sqlitePath);
|
||||
database = sqlite;
|
||||
}
|
||||
|
||||
return betterAuth({
|
||||
|
||||
+2
-4
@@ -4,11 +4,10 @@
|
||||
* DO NOT require("./server") in other modules, it likely creates circular dependency!
|
||||
*/
|
||||
import { getRandomInt, isDev, log, sleep } from "../src/util";
|
||||
import { auth, doubleCheckPassword, getDisableAuthSession, getSession } from "./better-auth";
|
||||
import { auth, closeAuthDatabase, doubleCheckPassword, getDisableAuthSession, getSession } from "./better-auth";
|
||||
import { createBetterAuthRouter, needSetup } from "./routers/better-auth-router";
|
||||
import { betterAuthSocketHandler } from "./socket-handlers/better-auth-socket-handler";
|
||||
import { loadEnvFile } from "node:process";
|
||||
import * as fs from "fs";
|
||||
|
||||
console.log("Welcome to Uptime Kuma");
|
||||
|
||||
@@ -91,7 +90,6 @@ log.debug("server", "Importing http-graceful-shutdown");
|
||||
const gracefulShutdown = require("http-graceful-shutdown");
|
||||
log.debug("server", "Importing prometheus-api-metrics");
|
||||
const prometheusAPIMetrics = require("prometheus-api-metrics");
|
||||
const TranslatableError = require("./translatable-error");
|
||||
|
||||
const { UptimeKumaServer } = require("./uptime-kuma-server");
|
||||
const server = UptimeKumaServer.getInstance();
|
||||
@@ -100,7 +98,6 @@ const app = server.app;
|
||||
|
||||
log.debug("server", "Importing Monitor");
|
||||
const Monitor = require("./model/monitor");
|
||||
const User = require("./model/user");
|
||||
|
||||
log.debug("server", "Importing Settings");
|
||||
const {
|
||||
@@ -1548,6 +1545,7 @@ async function shutdownFunction(signal) {
|
||||
}
|
||||
await sleep(2000);
|
||||
await Database.close();
|
||||
await closeAuthDatabase();
|
||||
|
||||
if (EmbeddedMariaDB.hasInstance()) {
|
||||
EmbeddedMariaDB.getInstance().stop();
|
||||
|
||||
+8
-3
@@ -2,6 +2,7 @@ const { sync: rimrafSync } = require("rimraf");
|
||||
const Database = require("../server/database");
|
||||
const { Settings } = require("../server/settings");
|
||||
const { sleep } = require("../src/util");
|
||||
const { closeAuthDatabase } = require("../server/better-auth");
|
||||
|
||||
class TestDB {
|
||||
dataDir;
|
||||
@@ -22,11 +23,15 @@ class TestDB {
|
||||
|
||||
async destroy() {
|
||||
await Database.close();
|
||||
await closeAuthDatabase();
|
||||
Settings.stopCacheCleaner();
|
||||
if (this.dataDir) {
|
||||
// Windows may hold file lock?
|
||||
await sleep(3000);
|
||||
rimrafSync(this.dataDir);
|
||||
try {
|
||||
rimrafSync(this.dataDir);
|
||||
} catch (e) {
|
||||
console.error("Windows may hold file lock?");
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user