mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-24 13:54:57 +00:00
Add debug logging to Prisma adapters and fix database schema issues
Co-authored-by: johndoe6345789 <224850594+johndoe6345789@users.noreply.github.com>
This commit is contained in:
@@ -7,17 +7,34 @@ export function createPrismaContext(
|
||||
databaseUrl?: string,
|
||||
options?: PrismaAdapterOptions
|
||||
): PrismaContext {
|
||||
console.log('[DBAL Prisma] Creating Prisma context')
|
||||
console.log('[DBAL Prisma] Database URL:', databaseUrl)
|
||||
console.log('[DBAL Prisma] Options:', options)
|
||||
|
||||
const inferredDialect = options?.dialect ?? inferDialectFromUrl(databaseUrl)
|
||||
console.log('[DBAL Prisma] Inferred dialect:', inferredDialect)
|
||||
|
||||
let prisma: PrismaClient
|
||||
|
||||
// For SQLite (or when dialect cannot be inferred), we need to use the driver adapter
|
||||
if (inferredDialect === 'sqlite' || !databaseUrl || inferredDialect === undefined) {
|
||||
const dbPath = databaseUrl?.replace('file:', '').replace('sqlite://', '') || '../../prisma/prisma/dev.db'
|
||||
const db = new Database(dbPath)
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
||||
const adapter = new PrismaBetterSqlite3(db)
|
||||
prisma = new PrismaClient({ adapter } as any)
|
||||
console.log('[DBAL Prisma] Using SQLite with path:', dbPath)
|
||||
|
||||
try {
|
||||
const db = new Database(dbPath)
|
||||
console.log('[DBAL Prisma] Database opened successfully')
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
||||
const adapter = new PrismaBetterSqlite3(db)
|
||||
console.log('[DBAL Prisma] Adapter created successfully')
|
||||
|
||||
prisma = new PrismaClient({ adapter } as any)
|
||||
console.log('[DBAL Prisma] PrismaClient created successfully')
|
||||
} catch (error) {
|
||||
console.error('[DBAL Prisma] Error creating Prisma client:', error)
|
||||
throw error
|
||||
}
|
||||
} else {
|
||||
// For PostgreSQL/MySQL with explicit connection strings
|
||||
// Note: Prisma 7 removed datasources config, so this may not work
|
||||
|
||||
@@ -48,14 +48,32 @@ const createIntegrationPrisma = (): PrismaClient => {
|
||||
const createProductionPrisma = (): PrismaClient => {
|
||||
// Use the database file from env or default location
|
||||
const databaseUrl = process.env.DATABASE_URL || 'file:../../prisma/prisma/dev.db'
|
||||
console.log('[Prisma] Creating production Prisma client')
|
||||
console.log('[Prisma] DATABASE_URL:', process.env.DATABASE_URL)
|
||||
console.log('[Prisma] Using database URL:', databaseUrl)
|
||||
|
||||
const dbPath = databaseUrl.replace('file:', '')
|
||||
const db = new Database(dbPath)
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
||||
const adapter = new PrismaBetterSqlite3(db)
|
||||
return new PrismaClient({
|
||||
adapter,
|
||||
log: process.env.NODE_ENV === 'development' ? ['error', 'warn'] : ['error'],
|
||||
})
|
||||
console.log('[Prisma] Resolved database path:', dbPath)
|
||||
|
||||
try {
|
||||
const db = new Database(dbPath)
|
||||
console.log('[Prisma] Database connection opened successfully')
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
||||
const adapter = new PrismaBetterSqlite3(db)
|
||||
console.log('[Prisma] Adapter created successfully')
|
||||
|
||||
const client = new PrismaClient({
|
||||
adapter,
|
||||
log: process.env.NODE_ENV === 'development' ? ['error', 'warn', 'query'] : ['error'],
|
||||
})
|
||||
console.log('[Prisma] PrismaClient created successfully')
|
||||
|
||||
return client
|
||||
} catch (error) {
|
||||
console.error('[Prisma] Error creating Prisma client:', error)
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
export const prisma =
|
||||
|
||||
79
frontends/nextjs/test-prisma-adapter.cjs
Normal file
79
frontends/nextjs/test-prisma-adapter.cjs
Normal file
@@ -0,0 +1,79 @@
|
||||
// Test script to debug Prisma adapter initialization
|
||||
const { PrismaClient } = require('@prisma/client');
|
||||
const { PrismaBetterSqlite3 } = require('@prisma/adapter-better-sqlite3');
|
||||
const Database = require('better-sqlite3');
|
||||
|
||||
console.log('Testing Prisma adapter initialization...\n');
|
||||
|
||||
// Test 1: Direct database path
|
||||
console.log('Test 1: Using direct path');
|
||||
try {
|
||||
const dbPath1 = './prisma/prisma/dev.db';
|
||||
console.log(` Database path: ${dbPath1}`);
|
||||
const db1 = new Database(dbPath1);
|
||||
console.log(' ✓ Database opened successfully');
|
||||
const adapter1 = new PrismaBetterSqlite3(db1);
|
||||
console.log(' ✓ Adapter created successfully');
|
||||
const prisma1 = new PrismaClient({ adapter: adapter1 });
|
||||
console.log(' ✓ PrismaClient created successfully');
|
||||
|
||||
// Try a simple query
|
||||
prisma1.user.findMany().then(users => {
|
||||
console.log(` ✓ Query successful, found ${users.length} users`);
|
||||
prisma1.$disconnect();
|
||||
}).catch(err => {
|
||||
console.log(` ✗ Query failed: ${err.message}`);
|
||||
prisma1.$disconnect();
|
||||
});
|
||||
} catch (error) {
|
||||
console.log(` ✗ Error: ${error.message}`);
|
||||
console.log(` Stack: ${error.stack}`);
|
||||
}
|
||||
|
||||
// Test 2: Using environment variable style path
|
||||
console.log('\nTest 2: Using file: prefix');
|
||||
try {
|
||||
const databaseUrl = 'file:./prisma/prisma/dev.db';
|
||||
const dbPath2 = databaseUrl.replace('file:', '');
|
||||
console.log(` Database URL: ${databaseUrl}`);
|
||||
console.log(` Resolved path: ${dbPath2}`);
|
||||
const db2 = new Database(dbPath2);
|
||||
console.log(' ✓ Database opened successfully');
|
||||
const adapter2 = new PrismaBetterSqlite3(db2);
|
||||
console.log(' ✓ Adapter created successfully');
|
||||
const prisma2 = new PrismaClient({ adapter: adapter2 });
|
||||
console.log(' ✓ PrismaClient created successfully');
|
||||
|
||||
// Try a simple query
|
||||
prisma2.user.count().then(count => {
|
||||
console.log(` ✓ Count query successful, ${count} users total`);
|
||||
prisma2.$disconnect();
|
||||
}).catch(err => {
|
||||
console.log(` ✗ Query failed: ${err.message}`);
|
||||
prisma2.$disconnect();
|
||||
});
|
||||
} catch (error) {
|
||||
console.log(` ✗ Error: ${error.message}`);
|
||||
console.log(` Stack: ${error.stack}`);
|
||||
}
|
||||
|
||||
// Test 3: Check what happens with undefined
|
||||
console.log('\nTest 3: Testing undefined handling');
|
||||
try {
|
||||
const databaseUrl = undefined;
|
||||
const dbPath3 = databaseUrl?.replace('file:', '') || './prisma/prisma/dev.db';
|
||||
console.log(` Database URL: ${databaseUrl}`);
|
||||
console.log(` Resolved path: ${dbPath3}`);
|
||||
const db3 = new Database(dbPath3);
|
||||
console.log(' ✓ Database opened successfully');
|
||||
const adapter3 = new PrismaBetterSqlite3(db3);
|
||||
console.log(' ✓ Adapter created successfully');
|
||||
const prisma3 = new PrismaClient({ adapter: adapter3 });
|
||||
console.log(' ✓ PrismaClient created successfully');
|
||||
prisma3.$disconnect();
|
||||
} catch (error) {
|
||||
console.log(` ✗ Error: ${error.message}`);
|
||||
console.log(` Stack: ${error.stack}`);
|
||||
}
|
||||
|
||||
console.log('\nAll tests completed!');
|
||||
Binary file not shown.
79
test-prisma-adapter.js
Normal file
79
test-prisma-adapter.js
Normal file
@@ -0,0 +1,79 @@
|
||||
// Test script to debug Prisma adapter initialization
|
||||
const { PrismaClient } = require('@prisma/client');
|
||||
const { PrismaBetterSqlite3 } = require('@prisma/adapter-better-sqlite3');
|
||||
const Database = require('better-sqlite3');
|
||||
|
||||
console.log('Testing Prisma adapter initialization...\n');
|
||||
|
||||
// Test 1: Direct database path
|
||||
console.log('Test 1: Using direct path');
|
||||
try {
|
||||
const dbPath1 = './prisma/prisma/dev.db';
|
||||
console.log(` Database path: ${dbPath1}`);
|
||||
const db1 = new Database(dbPath1);
|
||||
console.log(' ✓ Database opened successfully');
|
||||
const adapter1 = new PrismaBetterSqlite3(db1);
|
||||
console.log(' ✓ Adapter created successfully');
|
||||
const prisma1 = new PrismaClient({ adapter: adapter1 });
|
||||
console.log(' ✓ PrismaClient created successfully');
|
||||
|
||||
// Try a simple query
|
||||
prisma1.user.findMany().then(users => {
|
||||
console.log(` ✓ Query successful, found ${users.length} users`);
|
||||
prisma1.$disconnect();
|
||||
}).catch(err => {
|
||||
console.log(` ✗ Query failed: ${err.message}`);
|
||||
prisma1.$disconnect();
|
||||
});
|
||||
} catch (error) {
|
||||
console.log(` ✗ Error: ${error.message}`);
|
||||
console.log(` Stack: ${error.stack}`);
|
||||
}
|
||||
|
||||
// Test 2: Using environment variable style path
|
||||
console.log('\nTest 2: Using file: prefix');
|
||||
try {
|
||||
const databaseUrl = 'file:./prisma/prisma/dev.db';
|
||||
const dbPath2 = databaseUrl.replace('file:', '');
|
||||
console.log(` Database URL: ${databaseUrl}`);
|
||||
console.log(` Resolved path: ${dbPath2}`);
|
||||
const db2 = new Database(dbPath2);
|
||||
console.log(' ✓ Database opened successfully');
|
||||
const adapter2 = new PrismaBetterSqlite3(db2);
|
||||
console.log(' ✓ Adapter created successfully');
|
||||
const prisma2 = new PrismaClient({ adapter: adapter2 });
|
||||
console.log(' ✓ PrismaClient created successfully');
|
||||
|
||||
// Try a simple query
|
||||
prisma2.user.count().then(count => {
|
||||
console.log(` ✓ Count query successful, ${count} users total`);
|
||||
prisma2.$disconnect();
|
||||
}).catch(err => {
|
||||
console.log(` ✗ Query failed: ${err.message}`);
|
||||
prisma2.$disconnect();
|
||||
});
|
||||
} catch (error) {
|
||||
console.log(` ✗ Error: ${error.message}`);
|
||||
console.log(` Stack: ${error.stack}`);
|
||||
}
|
||||
|
||||
// Test 3: Check what happens with undefined
|
||||
console.log('\nTest 3: Testing undefined handling');
|
||||
try {
|
||||
const databaseUrl = undefined;
|
||||
const dbPath3 = databaseUrl?.replace('file:', '') || './prisma/prisma/dev.db';
|
||||
console.log(` Database URL: ${databaseUrl}`);
|
||||
console.log(` Resolved path: ${dbPath3}`);
|
||||
const db3 = new Database(dbPath3);
|
||||
console.log(' ✓ Database opened successfully');
|
||||
const adapter3 = new PrismaBetterSqlite3(db3);
|
||||
console.log(' ✓ Adapter created successfully');
|
||||
const prisma3 = new PrismaClient({ adapter: adapter3 });
|
||||
console.log(' ✓ PrismaClient created successfully');
|
||||
prisma3.$disconnect();
|
||||
} catch (error) {
|
||||
console.log(` ✗ Error: ${error.message}`);
|
||||
console.log(` Stack: ${error.stack}`);
|
||||
}
|
||||
|
||||
console.log('\nAll tests completed!');
|
||||
Reference in New Issue
Block a user