Así que estoy usando typeorm con ormconfig.json. Dado que synchronize
no se puede usar en producción, ¿cómo puedo ejecutar las migraciones basadas en entidades?
mi archivo ormconfig.json
{ "type": "postgres", "host": "localhost", "port": 5432, "username": "", "password": "", "database": "backend-api", "synchronize": false, "logging": true, "migrationsRun": true, "entities": ["dist/entity/**/*.js"], "migrations": ["dist/migration/**/*.js"], "subscribers": ["dist/subscriber/**/*.js"], "cli": { "entitiesDir": "src/entity", "migrationsDir": "src/migration", "subscribersDir": "src/subscriber" } }
También aquí está mi único archivo de entidad Todo.ts
import { BaseEntity, Column, CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn, } from 'typeorm'; @Entity() export class Todo extends BaseEntity { @PrimaryGeneratedColumn() id: number; @Column('text') text: string; @Column('boolean', { default: false }) completed: boolean; @CreateDateColumn() createdAt: Date; @UpdateDateColumn() updatedAt: Date; }
Tengo la solución para este problema.
Así que mi ormconfig.json
necesitaba una pequeña actualización,
{ "type": "postgres", "host": "localhost", "port": 5432, "username": "", "password": "", "database": "backend-api", "synchronize": false, "logging": true, "migrationsRun": false, "entities": ["src/entity/**/*.ts"], "migrations": ["src/migration/**/*.ts"], "subscribers": ["src/subscriber/**/*.ts"], "cli": { "entitiesDir": "src/entity", "migrationsDir": "src/migration", "subscribersDir": "src/subscriber" } }
y necesitaba instalar ts-node
para compilar la entidad ts
y los archivos de migración.
Creé los scripts mencionados a continuación:
"scripts": { "start": "ts-node src/index.ts", "entity:create": "./node_modules/.bin/ts-node ./node_modules/.bin/typeorm entity:create -n", "migrate:generate": "./node_modules/.bin/ts-node ./node_modules/.bin/typeorm migration:generate -n", "migrate:run": "./node_modules/.bin/ts-node ./node_modules/.bin/typeorm migration:run", "migrate:revert": "./node_modules/.bin/ts-node ./node_modules/.bin/typeorm migration:revert", "schema:drop": "./node_modules/.bin/ts-node ./node_modules/.bin/typeorm schema:drop" }
y en el orden del guión. Lo único que aprendí es que no puede simplemente crear un archivo de entidad y ejecutar migration:generate
en él. Primero debe crear una entidad basada en typeorm
cli. No sé por qué, pero para mí, una vez que comencé a crear la entidad usando la CLI, todo cayó en su lugar.
Para ejecutar las migraciones basadas en entidades , puede generar los archivos de migraciones de sus entidades como se indica en la documentación de TypeOrm sobre la generación de migraciones .
TypeORM puede generar automáticamente archivos de migración con los cambios de esquema que haya realizado.
Ejecute este comando especificando el nombre de la migración para generar el archivo:
typeorm migration:generate -n <MigrationName>
Después de eso, solo necesita ejecutar sus migraciones usando la CLI:
typeorm migration:run
Una buena práctica es usar el parámetro migrationsRun
en la configuración de su base de datos para ejecutar sus migraciones al inicio:
migrationsRun: true,