2 votes

Migration Sequelize dans Heroku Postgres : Chaîne d'erreurs

Mon application express.js est sur un dyno heroku. J'ai créé quelques endpoints rest api pour les opérations crud (connecté à heroku-postgres db) et vérifié qu'ils fonctionnent avec Postman.

Mes problèmes ont commencé après avoir essayé d'incorporer des migrations. Je ne suis qu'un jeune développeur, alors faites-moi savoir si je suis en train d'examiner des pistes mortes, et quelles autres informations je dois fournir pour diagnostiquer correctement ces messages d'erreur.

Démarrer les migrations avec sequelize model:create --name tableName --attributes ... était bien.

En cours d'exécution sequelize db:migrate L'erreur que je reçois est la suivante :

ERROR: Dialect needs to be explicitly supplied as of v4.0.0

Mon actuel config.json est

{
  "production": {
    "use_env_variable": "DATABASE_URL",
    "dialect": "postgres",
    "dialectOptions": {
      "ssl": {
        "require": true
      }
    },
    "ssl": true
  }
}

et j'ai aussi spécifié le dialecte en models/index.js (ceci a été généré avec config.json dans le sequelize model:create... commande)

require('dotenv').config();
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = 'production' || process.env.NODE_ENV;
const config = require(__dirname + '/../config/config.json')[env];
const db = {};

const sequelize = new Sequelize(process.env.DATABASE_URL, {
  logging: false,
  dialect: "postgres",
  dialectOptions: {
    ssl: true,
  }
});
// let sequelize;
// if (config.use_env_variable) {
//   sequelize = new Sequelize(process.env[config.use_env_variable], config);
// } else {
//   sequelize = new Sequelize(config.database, config.username, config.password, config);
// }

Si const sequelize = ... est commenté, et let sequelize; ... est utilisé à la place, la même erreur de dialecte se produit.

Il est intéressant de noter que lorsque je définis la variable shell export NODE_ENV=production une nouvelle erreur se produit - ERROR: Error parsing url: undefined .

Cela me laisse d'autant plus perplexe que je pensais qu'il était déjà défini dans la directive sur la protection des données. const env = ... ligne dans index.js .

J'ai alors essayé de spécifier l'url dans la commande de migration - sequelize db:migrate --url 'postgres://username:password@localhost/test1' .

L'url que j'ai fournie a fonctionné pour les tests CRUD via Postman, ainsi que pour la collecte des données du formulaire via le front-end.

Maintenant l'erreur est ERROR: connect ECONNREFUSED 127.0.0.1:5432 . Je ne sais pas comment procéder à partir de maintenant, et je ne suis pas sûr que les mesures que j'ai prises depuis l'erreur de dialecte soient les bonnes pour résoudre ces problèmes.

Mes questions portent en fait sur la cause de ces erreurs.

1) Où dois-je encore préciser le dialecte ?

2) Pourquoi l'erreur de dialecte disparaît-elle lorsque je export NODE_ENV même si l'environnement est déjà spécifié dans index.js ?

3) De même pour l'url, pourquoi l'url de mon site Web ne peut-elle pas être utilisée ? .env a obtenu un résultat avec require('dotenv').config() être accepté ?

0voto

Scott Points 67

C'était très bien de générer des fichiers de migration et de modèle en utilisant la sequelize-cli. J'avais poussé ces changements vers heroku mais j'exécutais les commandes de migration localement. (Je n'ai pas de base de données locale de développement, mon seul environnement est la production).

Un autre problème était que le bash heroku s'exécutait dans ce que je peux seulement décrire comme un instantané de l'état de l'application lorsque heroku run bash est exécuté. Cela signifie que même si je créais, modifiais et poussais sans problème, les commandes de migration restaient "bloquées" sur l'ancienne version jusqu'au redémarrage de bash.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X