typescript - La aplicación NestJS en Heroku se bloquea debido a TypeOrmModule sin un mensaje de error preciso
Tengo una aplicación funcional construida con NestJS, que está desplegada en un servidor Heroku. Solía funcionar, hasta que recientemente cada compilación que hago falla sin una razón aparente. Hice algunas pruebas y descubrí que la aplicación funciona cuando el TypeOrmModule no está incluido en los imports del AppModule, pero obviamente es inutilizable sin la base de datos. Aquí está cómo se ve la configuración del AppModule:
const databaseUrl = process.env.DATABASE_URL;
@Module({
imports: [
TypeOrmModule.forRoot(databaseUrl ? {
type: 'postgres',
url: databaseUrl,
entities: [__dirname + '/**/*.entity{.ts,.js}'],
synchronize: true,
} : {
// configuration for local development
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
He verificado y el databaseUrl se está cargando correctamente desde la URL del entorno. Este no es un ejemplo simplificado, esto es literalmente lo que despliego en Heroku; he eliminado todos los demás módulos para entender de dónde venía el problema. Si elimino el TypeOrmModule ahora, la aplicación no se va a colapsar. Aquí está el registro poco útil que Heroku me proporciona al producirse el fallo:
07/08/2020, 12:09:13 PM [NestFactory] Iniciando la aplicación Nest... 2020-07-08T12:09:13.300817+00:00 app[web.1]: [Nest] 23
07/08/2020, 12:09:13 PM [InstanceLoader] Dependencias de TypeOrmModule inicializadas +76ms 2020-07-08T12:09:13.301462+00:00 app[web.1]: [Nest] 23
07/08/2020, 12:09:13 PM [InstanceLoader] Dependencias de AppModule inicializadas +1ms 2020-07-08T12:09:13.416093+00:00 heroku[web.1]: Proceso finalizó con estado 0 2020-07-08T12:09:13.463362+00:00 heroku[web.1]: Estado cambiado de iniciando a detenido 2020-07-08T12:09:13.463362+00:00 heroku[web.1]: Estado cambiado de iniciando a detenido
La compilación antes de que la aplicación se inicie ha sido exitosa indicada en el mismo registro. He estado realmente desconcertado aquí durante más de un mes.
Respuesta #1
Puedes probar esto en tu main.ts para obtener el registro en tal caso:
process.on('uncaughtException', (err) => {
Logger.warn(err, 'LOGGER', false);
});
Si no es suficiente, puede agregar otros eventos para la depuración haciendo referencia aquí:
https://nodejs.org/api/process.html#process_process_events
Y por favor, revisa tu archivo tsconfig.json si tienes algún módulo de migraciones y el objetivo debería ser como este:
"target": "es2015",
"module": "CommonJS",
Y una última cosa: Asegúrate de que el nombre de tu base de datos coincida con la configuración de TypeORM
