确保数据库 schema 与当前版本一致
(dataDir: string, dbPath: string, schemaPath: string)
| 135 | |
| 136 | /** 确保数据库 schema 与当前版本一致 */ |
| 137 | function ensureDatabase(dataDir: string, dbPath: string, schemaPath: string) { |
| 138 | const prisma = getBundledPrismaCommand(__dirname); |
| 139 | try { |
| 140 | execFileSync(prisma.command, [...prisma.args, 'db', 'push', '--skip-generate', `--schema=${schemaPath}`], { |
| 141 | stdio: 'pipe', |
| 142 | env: preparePrismaCliEnv(dataDir, dbPath), |
| 143 | }); |
| 144 | } catch (err: unknown) { |
| 145 | const msg = err instanceof Error ? err.message : String(err); |
| 146 | console.error('Failed to initialize database:', msg); |
| 147 | const stderr = getCommandOutput(err, 'stderr'); |
| 148 | const stdout = getCommandOutput(err, 'stdout'); |
| 149 | writeErrorLog({ |
| 150 | level: 'error', |
| 151 | source: 'server.cli.ensureDatabase', |
| 152 | message: 'Failed to initialize database', |
| 153 | error: err, |
| 154 | metadata: { |
| 155 | dbPath, |
| 156 | schemaPath, |
| 157 | stderr, |
| 158 | stdout, |
| 159 | }, |
| 160 | }, { dataDir }); |
| 161 | if (stderr) { |
| 162 | console.error(stderr); |
| 163 | } |
| 164 | if (stdout) { |
| 165 | console.error(stdout); |
| 166 | } |
| 167 | process.exit(1); |
| 168 | } |
| 169 | } |
| 170 | |
| 171 | async function main() { |
| 172 | const { port, host, dataDir, webDir, disableAccessPassword } = parseArgs(); |
no test coverage detected