Как переопределить или отключить настройку тайм-аута Postgrex: 15 секунд? - PullRequest
0 голосов
/ 12 октября 2018

Работа над приложением 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 мс везде в источнике, но, похоже, он был скомпилирован в двоичный файл.Я не разработчик erlang / elixir, просто помогаю клиенту установить приложение для демонстрации.У меня вопрос:

  • Как мне перекомпилировать драйвер Postgrex с измененным параметром времени ожидания?
  • Есть ли другой способ переопределить этот параметр или вообще отключить время ожидания?Я попытался найти-заменить практически каждый экземпляр "15" в источнике.

Ответы [ 2 ]

0 голосов
/ 13 октября 2018
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 и перекомпилировать приложение, чтобы эти значения действительно применялись.

0 голосов
/ 12 октября 2018

При выдаче запроса с использованием postgrex последним аргументом может быть список ключевых слов параметров.

Postgrex.query!(pid, "AN SQL STATEMENT;", [], timeout: 50_000, pool_timeout: 40_000)

https://hexdocs.pm/postgrex/Postgrex.html#query/4

...