Сиквелизировать миграцию в Heroku Postgres - PullRequest
0 голосов
/ 03 декабря 2018

Мое приложение express.js работает на Heroku Dyno.Я создал некоторые конечные точки api rest для грубых операций (связанных с heroku-postgres db) и проверил, что они работают с Postman.

Мои проблемы начались после того, как я попытался включить миграции.Я просто младшийdev, пожалуйста, дайте мне знать, если я исследую мертвые отведения и какую другую информацию нужно предоставить для правильной диагностики этих сообщений об ошибках.

Запуск миграции с sequelize model:create --name tableName --attributes ... прошел нормально.

При запуске sequelize db:migrate, ошибка, которую я получаю:

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

Мой текущий config.json равен

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

, и я также указал диалект в models/index.js(это было сгенерировано вместе с config.json в команде sequelize model:create...)

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);
// }

Если const sequelize = ... закомментирован и вместо него используется let sequelize; ..., возникает та же ошибка диалекта.

Интересно, что когда я устанавливаю переменную оболочки export NODE_ENV=production, возникает новая ошибка - ERROR: Error parsing url: undefined.

Это меня более озадачивает, так как я думал, что она уже определена в строке const env = ... вindex.js.

Итак, я попытался указать url в команде миграции - sequelize db:migrate --url 'postgres://username:password@localhost/test1'.

Этот предоставленный мной URL работал для тестирования CRUD через Postman, а также черезинтерфейс для сбора данных формы.

Теперь ошибка ERROR: connect ECONNREFUSED 127.0.0.1:5432.Я не уверен, как поступить с этого момента, и не уверен, что шаги, которые я предпринял после ошибки диалекта, являются правильными способами исправить эти проблемы.

Мои вопросы действительно являются причиной этих ошибок.

1) Где еще мне нужно указать диалект?

2) Почему ошибка диалекта исчезает, когда я export NODE_ENV, даже если среда уже указана в index.js?

3) Аналогично для URL, почему не будет принят URL из моего .env, введенного с require('dotenv').config()?

1 Ответ

0 голосов
/ 11 декабря 2018

Хорошо было генерировать файлы миграции и модели, используя sequelize-cli.Я перенес эти изменения в heroku, но выполнял команды миграции локально.(У меня нет локальной базы данных dev, моя единственная среда - производственная).

Другая проблема заключалась в том, что heroku bash работал, как я могу описать, как снимок состояния приложения только при запуске heroku run bash.,Это означало, что, хотя я прекрасно создавал, редактировал и выдвигал, команды миграции будут «зависать» на старой версии до перезапуска bash.

...