#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.