Проблемы с подключением сервера Knex Heroku к postgres db - Node.js - PullRequest
0 голосов
/ 21 июня 2020

Я пытаюсь запустить свой сервер node- express с GraphQL и Knex и подключить его к базе данных PostgresQL в heroku.

Когда я запускаю heroku bash CLI и пытаюсь migrate Я получаю эту ошибку


    ~ $ npm run migrate

    > syncify-server@0.0.0 migrate /app
    > knex migrate:latest

    Using environment: staging
    Error: connect ECONNREFUSED 127.0.0.1:5432
        at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16)
    npm ERR! code ELIFECYCLE
    npm ERR! errno 1
    npm ERR! syncify-server@0.0.0 migrate: `knex migrate:latest`
    npm ERR! Exit status 1
    npm ERR! 
    npm ERR! Failed at the syncify-server@0.0.0 migrate script.
    npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

    npm ERR! A complete log of this run can be found in:
    npm ERR!     /app/.npm/_logs/2020-06-21T00_20_17_455Z-debug.log

Он отлично работает локально в разработке. Мой knex. js файл


    import dotenv from 'dotenv'
    import knex from 'knex'
    import mockKnex from 'mock-knex'

    dotenv.config()
    let knexConnection

    if (process.env.NODE_ENV === 'test') {
      knexConnection = knex({
        client: 'pg',
        debug: false,
      })
      mockKnex.mock(knexConnection)
     } else {
          knexConnection = knex({
            client: 'pg',
            connection: {
              url: process.env.DATABASE_URL,
              type: 'postgres',
              charset: 'utf8',
              ssl: false
            },
          })
        }

    export default knexConnection


и knexfile. js

require('dotenv').config()

module.exports = {
  development: {
    client: 'pg',
    connection: {
      url: process.env.DATABASE_URL,
      charset: 'utf8',
    },
  },

  staging: {
    client: 'pg',
    connection: {
      url: process.env.DATABASE_URL,
      charset: 'utf8',
    },
    pool: {
      min: 2,
      max: 10,
    },
    migrations: {
      tableName: 'knex_migrations',
    },
  },

  production: {
    client: 'pg',
    connection: {
      url: process.env.DATABASE_URL,
      charset: 'utf8',
    },
    pool: {
      min: 2,
      max: 10,
    },
    migrations: {
      tableName: 'knex_migrations',
    },
  },
}

Я пытался изолировать проблему, но чувствую, что у меня может быть больше одного.

В конфигурационных варах у меня есть DATABASE_URL как URL-адрес heroku psql db и NODE_ENV как «промежуточный», а также все настройки auth0.

Я могу получить доступ онлайн-базу данных, используя psql в командной строке. У меня есть правильные таблицы, и я могу создавать и извлекать данные с помощью операторов SQL.

Когда я настраиваю свой локальный сервер для использования heroku psql db, я получаю сообщение об ошибке relation "users" does not exist То же самое, если я попробую другие таблицы в базе данных.

Я попытался изменить свой SSL на true, который вызывал ошибки, и на false, который, похоже, ничему не повредил. (Я пробовал много других вещей)

Если я попаду на онлайн-сервер heroku, он просто выдаст общую c ошибку без каких-либо деталей.

Исходный код здесь

1 Ответ

0 голосов
/ 23 июня 2020

Потеряв несколько дней на это, я исправил.

Classi c Ошибки переменных env. Я не включил AUTH0_ISSUER в свою конфигурацию, которая некоторое время была реализована в обновлении go, но после первого развертывания на heroku.

Также, несмотря на настройку моих файлов knex для использования DATABASE_URL, это было не поднимая его, и подключается к базе данных только в том случае, если я использовал все пять индивидуальных настроек.

DB_NAME=
DB_USER=
DB_PASSWORD=
DB_HOST=
DB_PORT=

Я не мог понять, почему именно, но у меня есть файлы server. js в './dist' на которые есть ссылки в минимизированном коде, поэтому я думаю, что он должен, но каким-то образом уже перенесен, чтобы использовать это, и я немного застрял. Я бы предпочел использовать DATABASE_URL, поскольку я думаю, что heroku динамически обновляет это значение время от времени и не уверен, как защитить мой сервер от этого. ?

...