не удается перенести мою таблицу миграции knex в postgres на heroku

#node.js #postgresql #heroku

Вопрос:

Я следую учебнику на YouTube, в котором локально используются node express knex и sqlite, а также postgres на heroku. Мне удалось заставить все работать локально с sqlite, и мне удалось загрузить приложение на heroku. Я получаю первое домашнее сообщение. Я решил создать пустую базу данных postgres на heroku и могу просмотреть учетные данные базы данных на heroku. Мне нужно перенести мои таблицы knex в базу данных heroku postgres. Согласно видео ниже, мне нужно использовать эту инструкцию

heroku run knex migrate:latest -a node-knex1

Что приводит меня к следующей ошибке

 Running knex migrate:latest on ⬢ node-knex1... up, run.3492 (Free)
Using environment: production
error: no pg_hba.conf entry for host "54.76.162.141", user "vnujkqszmxsboi", database "def52ulvb1tjg9", SSL off
    at Parser.parseErrorMessage (/app/node_modules/pg-protocol/dist/parser.js:278:15)
    at Parser.handlePacket (/app/node_modules/pg-protocol/dist/parser.js:126:29)
    at Parser.parse (/app/node_modules/pg-protocol/dist/parser.js:39:38)
    at Socket.<anonymous> (/app/node_modules/pg-protocol/dist/index.js:10:42)
    at Socket.emit (events.js:315:20)
    at addChunk (internal/streams/readable.js:309:12)
    at readableAddChunk (internal/streams/readable.js:284:9)
    at Socket.Readable.push (internal/streams/readable.js:223:10)
    at TCP.onStreamRead (internal/stream_base_commons.js:188:23)
 

мой knexfile.js выглядит это следующим образом.

   module.exports = {
      development: {
        client: 'sqlite3',
        connection: {
          filename: './data/lessons.db3',
        },
        useNullAsDefault: true,
        pool: {
          afterCreate: (conn, done) => {
           conn.run('PRAGMA foreign_keys = ON', done);
          },
        },
      },
      production: {
        client: 'pg',
        connection: process.env.DATABASE_URL,
        pool: {
          min: 2,
          max: 10,
        },
        migrations: {
          tablename: 'knex-migrations',
          directory: './migrations',
        },
      },
    };

[Node Express Tutorial 18 - Setting up a Postgres database in 
Heroku][1]


  [1]: https://www.youtube.com/watch?v=OZQWfW3VvhEamp;list=PLKii3VqdFnoZY6EBxb2K37D0wrEmS-5RDamp;index=17
 

Ответ №1:

Я обнаружил, что могу преодолеть свою проблему, изменив knexfile.js к чему-то близкому к тому, что есть в документации heroku.

 module.exports = {
  development: {
    client: 'sqlite3',
    connection: {
      filename: './data/lessons.db3',
    },
    useNullAsDefault: true,
    pool: {
      afterCreate: (conn, done) => {
        conn.run('PRAGMA foreign_keys = ON', done);
      },
    },
  },
  production: {
    client: 'pg',
    connection: {
      connectionString: process.env.DATABASE_URL,
      ssl: { rejectUnauthorized: false },
    },
    migrations: {
      directory: __dirname   '/migrations',
    },
    seeds: {
      directory: __dirname   '/seeds',
    },
  },
};