Как переопределить или отключить настройку тайм-аута Postgrex: 15 секунд?
Работаем над приложением Elixir. Есть функция Scraper, которая копирует данные из таблицы Google Spreadsheet в базу данных postgres через драйвер Postgrex. Соединение через Google API работает нормально, но функция всегда отключается через 15 секунд.
01:48:36.654 [info] Running MyApp.Endpoint with Cowboy using http://localhost:80
Interactive Elixir (1.6.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> Scraper.update
542
iex(2)> 01:48:55.889 [error] Postgrex.Protocol (#PID<0.324.0>) disconnected: ** (DBConnection.ConnectionError) owner #PID<0.445.0> timed out because it owned the connection for longer than 15000ms
Я пытался изменить 15_000
Настройка тайм-аута MS везде в источнике, но, кажется, настройка была скомпилирована в двоичный файл. Я не разработчик erlang / elixir, просто помогаю клиенту установить приложение для демонстрации. Мой вопрос:
- Как я могу перекомпилировать драйвер Postgrex с измененной настройкой тайм-аута?
- Есть ли другой способ переопределить этот параметр или вообще отключить тайм-аут? Я попытался найти-заменить практически каждый экземпляр "15" в источнике.
2 ответа
config :my_app, MyApp.Repo,
adapter: Ecto.Adapters.Postgres,
username: "postgres",
password: "postgres",
database: "my_app_dev",
hostname: "localhost",
timeout: 600_000,
ownership_timeout: 600_000,
pool_timeout: 600_000
смотреть на timeout
а также ownership_timeout
, Эти значения установлены на 600 секунд. И, вероятно, не из них необходимы.
Также я хочу сказать, что однажды мне пришлось удалить все из _build
и перекомпилировать приложение, чтобы эти значения действительно применялись.
При выдаче запроса с помощью postgrex последним аргументом может быть список ключевых слов параметров.
Postgrex.query!(pid, "AN SQL STATEMENT;", [], timeout: 50_000, pool_timeout: 40_000)