2017-01-13 14 views
2

Я пытаюсь запустить свою первую миграцию, которая создает единую таблицу в базе данных postgres heroku.Knex Migration Postgres Heroku - Ошибка: невозможно получить подключение

Когда я пытаюсь запустить knex migrate:latest --env development Я принимаю ошибку Error: Unable to acquire a connection.

Что я пробовал:

  • добавления ?ssl=true к концу моей строки соединения, хранящегося в process.env.LISTINGS_DB_URL, как я знаю, иногда это требование, чтобы связаться с Heroku
  • установки переменная окр PGSSLMODE=require

я наткнулся this article, где кто-то заметил, что knex не будет принимать ключи, основанные на окружающую среду. Тем не менее, я пытаюсь следовать вместе с this tutorial, что указывает на то, что он делает. Я также видел множество других ссылок, которые еще раз подтверждают это.

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

Кроме того, я попытался определить, как я могу проверить, что отправляется как строка соединения. Смотря на knex documentation, я вижу в разделе «Как отладить раздел FAQ:« If you pass {debug: true} as one of the options in your initialize settings, you can see all of the query calls being made. Может ли кто-нибудь помочь мне в том, как я на самом деле это делаю? Или я уже успешно сделал это в моем knexfile.js?

Моего knex.js файл:

var environment = process.env.NODE_ENV || 'development'; 
var config = require('../knexfile.js')[environment]; 

module.exports = require('knex')(config); 

Моего knexfile.js:

module.exports = { 

    development: { 
     client: 'pg', 
     connection: process.env.LISTINGS_DB_URL, 
     migrations: { 
      directory: __dirname + '/db/migrations' 
     }, 
     seeds: { 
      directory: __dirname + '/db/seeds' 
     }, 
     debug: true 
    }, 

    staging: { 
     client: 'postgresql', 
     connection: { 
      database: 'my_db', 
      user: 'username', 
      password: 'password' 
     }, 
     pool: { 
      min: 2, 
      max: 10 
     }, 
     migrations: { 
      tableName: 'knex_migrations' 
     } 
    }, 

    production: { 
     client: 'postgresql', 
     connection: { 
      database: 'my_db', 
      user: 'username', 
      password: 'password' 
     }, 
     pool: { 
      min: 2, 
      max: 10 
     }, 
     migrations: { 
      tableName: 'knex_migrations' 
     } 
    } 

}; 

ответ

2

Как отметил @hhoburg в комментариях ниже, ошибка Error: Unable to acquire a connection является общим сообщением о том, что что-то неверно с Knex client configuration. См. here.

В моем случае, Knex не ссылается process.env.LISTINGS_DB_URL в knexfile.js, потому что:

  • , что переменная была установлена ​​в моем.окр файл
  • dotenv module не ссылаться/вызывается Knex

правильный способ настройки этой подробно описано в вопросе отслеживания knex here.

2

Я не уверен, если это поможет на всех, но я начал бежать в том же номер сегодня в моей местной среде. После слишком многого поиска я обнаружил, что this is the new error message для недопустимой конфигурации подключения или пула отсутствующих подключений. После долгой работы с ней я переключил свое соединение, чтобы использовать мой .env-файл для среды конфигурации; Я использовал строчную кодировку («dev») в файле knex.js, которая по какой-то причине не работала.

Правильно ли работает ваш .env-файл? Вы пытались испортить настройки пула, и вы уверены, что ваше имя пользователя и пароль верны для промежуточной и производственной базы данных?

Я надеюсь, что эта ссылка поможет!

+0

Спасибо! Хотя это не помогло решить проблему, основное внимание было уделено устранению неполадок при настройке среды. Я установил dotenv в своем проекте, но knex не ссылался на него при выполнении из cli для миграции. Один поиск «knex и dotenv» привел меня к https://github.com/tgriesser/knex/issues/590, у которого есть ответ. – HendPro12