Ir al contenido

Deploy

Usa jsorm deploy como entrypoint seguro de migraciones para producción. Mantén separado el runtime de requests de la propiedad del schema y ejecuta los deploys desde un entorno Node.js controlado.

Paquete/runtimeÚsalo paraNo lo uses para
@jsorm/runtime + @jsorm/fetchHandlers edge-safe y acceso SQL vía fetchSer dueño de migraciones o jsorm deploy
@jsorm/core / @jsorm/node + adaptadores nativosServicios Node, release jobs, acceso directo a base de datosEdge isolates sin soporte TCP/binarios nativos
@jsorm/nodeCLI, migraciones, jsorm deploy, automatización de releasesManejar requests edge

jsorm deploy es intencionalmente de propiedad Node-only. Aunque la app corra en Vercel Edge o Cloudflare Workers, el deploy debe ejecutarse en CI, un release job o un contenedor dedicado con @jsorm/node.

Ventana de terminal
jsorm deploy [selector] [--dry-run] [--verbose] [--strict] [--force]

jsorm deploy:

  1. valida conectividad
  2. revisa hashes/checksums de migraciones aplicadas
  3. inspecciona migraciones pendientes por cambios inseguros
  4. verifica integridad del snapshot antes de ejecutar
  5. aplica migraciones pendientes, o solo las previsualiza con --dry-run
  6. vuelve a verificar el snapshot después de ejecutar

Cuando jsorm.config.ts define un migration source por defecto, el selector es opcional:

Ventana de terminal
pnpm exec jsorm deploy --strict --verbose
pnpm exec jsorm deploy main --strict
FlagSignificadoUso típico
--dry-runPrevisualiza el plan pendiente sin mutar el historial de migracionesValidación en CI y revisión previa
--verboseImprime issues y sentencias SQL compiladasLogs de release y troubleshooting
--strictFalla con warnings, drift del snapshot o cambios que requieren revisiónValor por defecto en CI y producción
--forcePermite migraciones destructivas bloqueadas por defectoSolo tras revisión explícita

jsorm deploy está pensado para decisiones de CI/CD:

Exit codeSignificadoInterpretación en CI
0ÉxitoPromover release
2Error de uso/CLICorregir comando o config
3Falla de conectividad/preflightReintentar infraestructura o secretos
4Falla de integridadFrenar release e investigar drift/checksums
5Deploy inseguro bloqueadoRequiere revisión o --force
6Falla de ejecución/verificaciónFrenar rollout e inspeccionar estado de la base

Comandos recomendados:

Ventana de terminal
# preview en CI
pnpm exec jsorm deploy --dry-run --strict --verbose
# release de producción
pnpm exec jsorm deploy --strict --verbose
  1. Construye artefactos.
  2. Ejecuta jsorm deploy --dry-run --strict --verbose en CI.
  3. Ejecuta jsorm deploy --strict --verbose en el release job.
  4. Solo entonces promociona la nueva versión de la app.

Así mantienes la propiedad del schema en Node, el bundle edge minimalista y señales explícitas de fallo para CI.

name: deploy
on:
push:
branches: [main]
workflow_dispatch:
jobs:
migrate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
with:
version: 11
- uses: actions/setup-node@v4
with:
node-version: 24
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm run build
- run: pnpm exec jsorm deploy --strict --verbose
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
  • Runtime Node: usa @jsorm/core o @jsorm/node con adaptadores nativos y fija handlers cuando haga falta:
export const runtime = 'nodejs';
  • Runtime Edge: usa @jsorm/runtime + @jsorm/fetch en el bundle.
  • Ejecuta pnpm exec jsorm deploy --strict --verbose en GitHub Actions u otro release step Node, no dentro de la función edge.
  • Usa @jsorm/runtime + @jsorm/fetch para el acceso en request-time.
  • Ejecuta el deploy aparte desde un job Node antes de publicar el Worker.
Ventana de terminal
pnpm exec jsorm deploy --strict --verbose
pnpm exec wrangler deploy

Ejecuta el deploy antes de arrancar la app, o muévelo a un init container one-off:

FROM node:24-alpine AS build
WORKDIR /app
COPY . .
RUN corepack enable && pnpm install --frozen-lockfile && pnpm run build
FROM node:24-alpine
WORKDIR /app
COPY --from=build /app ./
RUN corepack enable
CMD ["sh", "-c", "pnpm exec jsorm deploy --strict --verbose && pnpm start"]

Usa un deploy job Node con @jsorm/pg contra la conexión Postgres:

Ventana de terminal
pnpm exec jsorm deploy main --strict --verbose

Si el runtime de la app es solo edge, deja el tráfico runtime en @jsorm/runtime + @jsorm/fetch, pero mantén el deploy en Node.

  • Deploy/migraciones: job Node + @jsorm/pg
  • Path de requests edge: @jsorm/runtime + @jsorm/fetch cuando expongas acceso SQL por HTTP
Ventana de terminal
pnpm exec jsorm deploy --strict --verbose

Usa un deploy job Node con @jsorm/mysql:

Ventana de terminal
pnpm exec jsorm deploy main --strict --verbose

Para tráfico runtime edge, mantén un path HTTP/fetch separado. No esperes que el adaptador MySQL nativo funcione dentro de edge isolates.