/
kochkatech
/
CorpGame
Обзор
Документация
Войти
/
kochkatech
/
CorpGame
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
1
CI/CD
Аналитика
dev
backend/scripts/generate-template-db.js
38 строк
2 KB
kochkareal
feat(devops): свод к одному процессу Node на SQLite, портативная сборка без Docker; аудит безопасности
06 авг 2026, 15:06
06 авг 2026, 15:06
3266bcd
Код
Авторство
О чём код?
// Пересобирает backend/prisma/template.db с нуля, накатывая на пустой файл все миграции. // // Запускается автоматически как часть `npm run build` (см. package.json), а не отдельным // шагом только в build-portable.ps1/Dockerfile — так template.db существует после ЛЮБОЙ // сборки, включая dev-режим (`node dist/main.js` из исходников без Docker и без портативной // сборки). Раньше этого шага не было вообще: ensureDatabaseFile() в main.ts ищет именно этот // файл, и без него на пустой БД падает assertSchemaIsCurrent() с "no such table: // _prisma_migrations" — сервер в dev-режиме отказывался стартовать на чистой машине. 'use strict'; const { execFileSync } = require('node:child_process'); const { existsSync, rmSync } = require('node:fs'); const path = require('node:path'); const backendRoot = path.join(__dirname, '..'); const dbPath = path.join(backendRoot, 'prisma', 'template.db'); for (const suffix of ['', '-wal', '-shm']) { const p = dbPath + suffix; if (existsSync(p)) rmSync(p); } // Вызываем сам entrypoint CLI через node, а не `npx prisma` — на Windows npx.cmd не // запускается через execFileSync без shell: true, а shell: true конкатенирует, не // экранирует аргументы (предупреждение DEP0190). require.resolve — тот же путь, что // нашёл бы npx, но без обёртки через оболочку. const prismaCli = require.resolve('prisma/build/index.js'); const url = 'file:' + dbPath.replace(/\\/g, '/'); execFileSync(process.execPath, [prismaCli, 'migrate', 'deploy'], { cwd: backendRoot, env: { ...process.env, DATABASE_URL: url }, stdio: 'inherit', }); for (const suffix of ['-wal', '-shm']) { const p = dbPath + suffix; if (existsSync(p)) rmSync(p); }