Fix database migrations - run from app container instead of volume mount

- Removed migrations volume mount from docker-compose.yml
- Added automatic migration runner in server.js on startup
- Migrations now run from files built into Docker image
- Fixes 'relation does not exist' errors
This commit is contained in:
Mikael Westöö
2026-01-23 22:12:16 +01:00
parent a44f8e18d7
commit 8653b00921
2 changed files with 30 additions and 4 deletions

View File

@@ -5,6 +5,7 @@ const { Pool } = require('pg');
const multer = require('multer');
const path = require('path');
const cookieParser = require('cookie-parser');
const fs = require('fs');
const app = express();
const PORT = process.env.PORT || 3000;
@@ -21,15 +22,41 @@ const pool = new Pool({
connectionTimeoutMillis: 2000,
});
// Test database connection (non-blocking)
// Run database migrations
async function runMigrations() {
try {
console.log('Running database migrations...');
const migrationsDir = path.join(__dirname, 'migrations');
const migrationFiles = fs.readdirSync(migrationsDir).sort();
for (const file of migrationFiles) {
if (file.endsWith('.sql')) {
console.log(`Running migration: ${file}`);
const migrationSQL = fs.readFileSync(path.join(migrationsDir, file), 'utf8');
await pool.query(migrationSQL);
console.log(`✓ Migration ${file} completed`);
}
}
console.log('All migrations completed successfully');
} catch (error) {
console.error('Migration error:', error.message);
throw error;
}
}
// Test database connection and run migrations
pool.query('SELECT NOW()')
.then((res) => {
console.log('Database connected successfully at:', res.rows[0].now);
return runMigrations();
})
.then(() => {
console.log('Database initialization complete');
})
.catch((err) => {
console.error('Database connection error:', err.message);
console.error('Database initialization error:', err.message);
console.error('Application will continue but database operations will fail');
console.error('Please ensure PostgreSQL is running and accessible');
});
// Middleware