This commit is contained in:
Louis Lam
2026-07-13 04:03:42 +08:00
parent cf9e32c7cb
commit 30ca4f3c4c
4 changed files with 44 additions and 13 deletions
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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);
}
}
}
}