Heroku не может соединиться с Postgres DB / Knex / Express - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть Express API, развернутый в Heroku, но когда я пытаюсь запустить миграцию, он выдает следующую ошибку:

heroku run knex migrate: последний Запуск knex migrate: последний на ⬢ закладках-node-api ... up, run.9925 (бесплатно) Использование среды: производство Ошибка: connect ECONNREFUSED 127.0.0.1:5432 в TCPConnectWrap.afterConnect [as oncomplete] (net.js: 1117: 14)

В моем knexfile.js у меня есть:

production: {
    client: 'postgresql',
    connection: {
      database: process.env.DATABASE_URL
    },
    pool: {
      min: 2,
      max: 10
    },
    migrations: {
      directory: './database/migrations'
    }
  }

Я также попытался назначить каталог миграций для tableName: 'knex_migrations', который выдает ошибку:

heroku run knexmigrate: последний Запуск knex migrate: последний на ⬢ bookmarks-node-api ... up, run.7739 (бесплатно) Использование среды: производство Ошибка: ENOENT: такого файла или каталога нет, scandir '/ app / migrations'

Вот конфигурация, установленная в Heroku:

-node-api git:(master) heroku pg:info
=== DATABASE_URL
Plan:                  Hobby-dev
Status:                Available
Connections:           0/20
PG Version:            10.7
Created:               2019-02-21 12:58 UTC
Data Size:             7.6 MB
Tables:                0
Rows:                  0/10000 (In compliance)
Fork/Follow:           Unsupported
Rollback:              Unsupported

Я думаю, проблема в том, что по какой-то причине она смотрит на localhost для базы данных, как если бы средачитается как development, хотя трассировка показывает Using environment: production.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Когда вы предоставляете объект как connection, вы предоставляете отдельные части информации о соединении.Здесь вы говорите, что имя ваше database - это все, что содержится в process.env.DATABASE_URL:

connection: {
  database: process.env.DATABASE_URL
},

Любые ключи, для которых вы не указали значения, возвращаются к значениям по умолчанию.Примером является ключ host, который по умолчанию настроен на локальный компьютер.

Но переменная окружения DATABASE_URL содержит все информации, которую необходимо подключить (хост, порт,имя пользователя, пароль и имя базы данных) в одну строку. Это целое значение должно быть вашей connection настройкой :

connection: process.env.DATABASE_URL,
0 голосов
/ 21 февраля 2019

Вы должны проверить, настроена ли надстройка Postgres, как описано в этих документах , поскольку DATABASE_URL автоматически устанавливается для вас, как указано здесь .

...