Implementé una aplicación NodeJS en Heroku y le adjunté una base de datos de Postgres con complementos de Heroku Postgres, todo funcionaba perfectamente. Después de unas horas, no pude autenticar mi solicitud. Después de verificar los registros, entiendo que la aplicación no puede conectarse a la base de datos debido a una contraseña incorrecta. Después de eso, también recibí 2 correos electrónicos de Heroku que me alertan sobre el mantenimiento.
Así que revisé la base de datos de credenciales y las credenciales son todas iguales excepto el URI. También revisé mis env vars y vi que Heroku agregó 2 variables más HEROKU_DATABASE_URL y HEROKU_POSTGRESQL_CRIMSON_URL, traté de editarlas con el nuevo URI de la base de datos actualizada pero tengo permiso...
También traté de eliminar y volver a crear una nueva base de datos, pero cada vez que el mantenimiento de Heroku vuelve y rompe mi aplicación
Aquí está mi código de conexión a Postgres (usando nest js)
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: async (configService: ConfigService) => {
const isProduction = configService.get('STAGE') === 'prod';
return {
ssl: isProduction,
extra: {
ssl: isProduction? { rejectUnauthorized: false }: null,
},
type: 'postgres',
autoLoadEntities: true,
synchronize: true,
host: configService.get('DB_HOST'),
port: configService.get('DB_PORT'),
username: configService.get('DB_USERNAME'),
password: configService.get('DB_PASSWORD'),
database: configService.get('DB_DATABASE'),
};
},
}),
Aquí está el error que obtengo
ERROR [ExceptionHandler] autenticación de contraseña fallida para el usuario "ryooypezxslwmn"
Solución del problema
Heroku Postgres proporciona y mantiene una variable de entorno por base de datos aprovisionada:
Como parte del proceso de aprovisionamiento, DATABASE_URL
se agrega una variable de configuración a la configuración de su aplicación. DATABASE_URL
contiene la URL que usa su aplicación para acceder a la base de datos. Si su aplicación ya tiene una base de datos Heroku Postgres y ha aprovisionado otra, el nombre de esta variable de configuración tiene el formato HEROKU_POSTGRESQL_<COLOR>_URL
(por ejemplo, HEROKU_POSTGRESQL_YELLOW_URL
).
Cuando la cadena de conexión de su base de datos necesita cambiar, Heroku actualiza automáticamente las variables DATABASE_URL
y.HEROKU_POSTGRESQL_<COLOR>_URL
Pero no estás usando estas variables. Heroku no establece las variables de entorno DB_HOST
, DB_PORT
, etc., y Heroku no las actualizará por usted. En lugar de configurar manualmente esas variables, le recomiendo encarecidamente que use las variables que proporciona Heroku:
El valor de la variable de DATABASE_URL
configuración de su aplicación puede cambiar en cualquier momento. No confíe en este valor ni dentro ni fuera de su aplicación Heroku.
No estoy familiarizado con TypeORM, pero parece que puedes pasarlo url
directamente:
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: async (configService: ConfigService) => {
const isProduction = configService.get('STAGE') === 'prod';
return {
ssl: isProduction,
extra: {
ssl: isProduction? { rejectUnauthorized: false }: null,
},
type: 'postgres',
autoLoadEntities: true,
synchronize: true,
url: configService.get('DATABASE_URL'), // <-- here
};
},
}),
No hay comentarios:
Publicar un comentario