#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',
},
},
};