Как обрабатывать соединение postgres, когда heroku изменяет DATABASE_URL

#node.js #heroku #heroku-postgres #node-postgres

#node.js #heroku #heroku-postgres #узел-postgres

Вопрос:

На Heroku Postgres написано:

Значение DATABASE_URL переменной конфигурации вашего приложения может измениться в любое время. Вы не должны полагаться на это значение ни внутри, ни вне вашего приложения Heroku.

Я разрабатываю Node.js сервер, который использует node-postgres для подключения и управления пулом соединений с базой данных.

Но что происходит, когда Heroku изменяет DATABASE_URL ? Как следует решить эту проблему?

Ответ №1:

Вы справляетесь с этим, всегда подключаясь к Postgres, используя любое значение DATABASE_URL . Например, вы можете использовать это значение в качестве строки подключения при создании своего пула:

 const connectionString = process.env.DATABASE_URL

const pool = new Pool({
  connectionString: connectionString,
})
  

Динамические модули Heroku перезапускаются при изменении их переменных среды или дополнений, что должно привести к тому, что ваш код получит новую строку подключения к базе данных при ее резервном запуске.

Комментарии:

1. Я уже использую переменную среды. Но некоторые вещи мне не ясны: pool = new Pool ({connectionString: connectionString}) оно выполняется только в первый раз, после чего, когда требуется новое соединение, оно ищется среди уже активных и доступных, в противном случае устанавливается новое. Итак, вопросы возникают незамедлительно: 1) Как ConnectionString фиксирует изменения? 2) Что происходит с соединениями, уже активными в пуле?

2. @alessiovolpe, при изменении переменной ваш dyno должен перезапуститься и выбрать новую настройку. Я добавлю это к своему ответу.

3. Теперь я понимаю, иначе я не смог бы объяснить, как это можно обрабатывать во время выполнения. Большое вам спасибо!

4. Если вы preboot включили, heroku не изменит env и не перезапустит ваш dyno. Только что подтвердил это с помощью службы поддержки Heroku.