fix(prisma): garantir DATABASE_URL efetivo no runtime\n\n- Força resolução do DATABASE_URL ao instanciar PrismaClient com fallback seguro em produção para file:/app/data/db.sqlite.\n- Evita falha "Error code 14: Unable to open the database file" quando o runtime cai em path relativo do .env dentro do container.\n- Compatível com stack.yml (volume sistema_db montado em /app/data).
This commit is contained in:
parent
06c4efd173
commit
d031acf7b8
2 changed files with 18 additions and 4 deletions
|
|
@ -99,11 +99,13 @@ Acesso
|
|||
|
||||
## Zero‑downtime (sem queda durante deploy)
|
||||
|
||||
Para evitar interrupção perceptível no deploy, habilitamos rollout "start-first" e múltiplas réplicas nos serviços web e Convex. O Traefik continua roteando para as tasks saudáveis enquanto uma task reinicia.
|
||||
Para evitar interrupção perceptível no deploy, habilitamos rollout "start-first". Para este projeto, mantemos **1 réplica** (web e Convex) por segurança, pois:
|
||||
- O web usa SQLite (Prisma); múltiplas réplicas concorrendo gravação no mesmo arquivo podem causar erros de lock/readonly.
|
||||
- O Convex backend self‑hosted não é clusterizado.
|
||||
|
||||
O `stack.yml` já inclui:
|
||||
- `replicas: 2` para `web` e `convex_backend`.
|
||||
- `update_config.order: start-first` + `failure_action: rollback`.
|
||||
- `replicas: 1` + `update_config.order: start-first` (Swarm sobe a nova task saudável antes de desligar a antiga).
|
||||
- `failure_action: rollback`.
|
||||
- `healthcheck` por porta local, garantindo que o Swarm só troque quando a nova task estiver OK.
|
||||
|
||||
Se quiser ajustar recursos/estratégia:
|
||||
|
|
|
|||
|
|
@ -4,7 +4,19 @@ declare global {
|
|||
var prisma: PrismaClient | undefined
|
||||
}
|
||||
|
||||
export const prisma = global.prisma ?? new PrismaClient()
|
||||
// Resolve a robust DATABASE_URL for all runtimes (prod/dev)
|
||||
const resolvedDatabaseUrl = (() => {
|
||||
const envUrl = process.env.DATABASE_URL?.trim()
|
||||
if (envUrl && envUrl.length > 0) return envUrl
|
||||
// Fallbacks by environment to ensure correctness in containers
|
||||
if (process.env.NODE_ENV === "production") {
|
||||
return "file:/app/data/db.sqlite"
|
||||
}
|
||||
return "file:./prisma/db.sqlite"
|
||||
})()
|
||||
|
||||
export const prisma =
|
||||
global.prisma ?? new PrismaClient({ datasources: { db: { url: resolvedDatabaseUrl } } })
|
||||
|
||||
if (process.env.NODE_ENV !== "production") {
|
||||
global.prisma = prisma
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue