No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Aprende todo un fin de semana sin pagar una suscripción 🔥

Aprende todo un fin de semana sin pagar una suscripción 🔥

Regístrate

Comienza en:

5D
2H
46M
2S

Corriendo migraciones de Postgres en Heroku

21/22
Recursos

Aportes 5

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

module.exports = {
  type: 'postgres',
  url: process.env.DATABASE_URL,
  synchronize: false,
  logging: false,
  migrations: ['src/database/migrations/*.ts'],
  migrationsTableName: 'migrations',
  entities: ['src/**/*.entity.ts'],
  cli: {
    migrationsDir: 'src/database/migrations',
  },
  ssl: {
    rejectUnauthorized: false,
  },
};

Hola 👋

Acompáñame a resolver los bugs del código, estos se presentan por algún cambio ya sea en la manera en que funciona nest o typeorm desde cuando se grabó el curso.

Arreglar el database.module

  • En el return de la conexión a la base de datos si o sí, debemos definir la opción entities.
return {
  entities: ['dist/**/*.entity{.ts,.js}'], // 👈
  ssl,
  type: 'postgres',
  url: configService.postgresURL,
};
  • Debemos condicionar el SSL, según estemos en producción (Heroku) o desarrollo (local). En mi caso he sacado esta lógica en una función aparte para reutilizarla en la conexión con pg
// src/common/helpers/get-ssl.ts
type SslOptions = boolean | { rejectUnauthorized: boolean };

export const getSsl = (): SslOptions => {
  // DYNO es una variable de entorno única de Heroku
  return process.env.DYNO ? { rejectUnauthorized: false } : false;
};
const ssl = getSsl();

return {
  entities: ['dist/**/*.entity{.ts,.js}'],
  ssl,
  type: 'postgres',
  url: configService.postgresURL,
};
  • Conexión con pg
const ssl = getSsl();

const client = new Client({
  connectionString: configService.postgresURL,
  ssl,
});

Espero haberles ayudado 🚀

Se pueden ahorrarse el comando de migraciones cada que hagan cambios en las entidades agregando al archivo Procfile en la segunda linea lo siguiente:

release: npm run migrations:prod

Así se correrá la migración automaticamente cuando existan migraciones nuevas y es una mejor practica para todo el proceso de deploy

https://typeorm.io/#/connection-options

# Connection options example
Here is a small example of connection options for mysql:

{
    host: "localhost",
    port: 3306,
    username: "test",
    password: "test",
    database: "test",
    logging: true,
    synchronize: true,
    entities: [
        "entity/*.js"
    ],
    subscribers: [
        "subscriber/*.js"
    ],
    entitySchemas: [
        "schema/*.json"
    ],
    migrations: [
        "migration/*.js"
    ],
    cli: {
        entitiesDir: "entity",
        migrationsDir: "migration",
        subscribersDir: "subscriber"
    }
}

👏