diff --git a/Dockerfile b/Dockerfile index fb826e3..0530494 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,6 +25,9 @@ WORKDIR /app # Only `.output` folder is needed from the build stage COPY --from=build /app/.output/ ./ +# Copy drizzle migrations folder +COPY --from=build /app/drizzle/ ./drizzle/ + # Change the port and host ENV PORT=80 ENV HOST=0.0.0.0 diff --git a/app/lib/db/migrate.ts b/app/lib/db/migrate.ts index 2b3968c..859595c 100644 --- a/app/lib/db/migrate.ts +++ b/app/lib/db/migrate.ts @@ -1,6 +1,8 @@ import { migrate } from "drizzle-orm/neon-http/migrator"; import { drizzle } from "drizzle-orm/neon-http"; import * as schema from "./schema"; +import { join } from "path"; +import { existsSync } from "fs"; export async function runMigrations() { if (!process.env.DATABASE_URL) { @@ -9,8 +11,20 @@ export async function runMigrations() { try { const db = drizzle(process.env.DATABASE_URL, { schema }); - console.log("[DB] Running migrations..."); - await migrate(db, { migrationsFolder: "./drizzle" }); + + // Determine the correct migrations folder path + // In development: ./drizzle from project root + // In production (Docker): /app/drizzle + let migrationsFolder = "./drizzle"; + + if (existsSync("/app/drizzle/meta/_journal.json")) { + migrationsFolder = "/app/drizzle"; + } else if (existsSync(join(process.cwd(), "drizzle/meta/_journal.json"))) { + migrationsFolder = join(process.cwd(), "drizzle"); + } + + console.log("[DB] Running migrations from:", migrationsFolder); + await migrate(db, { migrationsFolder }); console.log("[DB] Migrations completed successfully"); } catch (error) { console.error("[DB] Migration failed:", error);