Сеанс Elixir pry прерван из-за истечения времени ожидания подключения к базе данных

Я с радостью следовал этому совету о том, как запустить pry в отладчике моих тестов контроллера Phoenix:

  • require IEx в целевом файле
  • добавить IEx.pry к нужной строке
  • запустить тесты внутри IEx: iex -S mix test --trace

Но через несколько секунд всегда появлялась эта ошибка:

16:51:08.108 [error] Postgrex.Protocol (#PID<0.250.0>) disconnected: 
** (DBConnection.ConnectionError) owner #PID<0.384.0> timed out because 
it owned the connection for longer than 15000ms

Как говорится в сообщении, в этот момент время ожидания соединения с базой данных истекло, и любые команды, которые вызывают соединение с базой данных, завершатся ошибкой с ошибкой DBConnection.OwnershipError. Как мне запретить подключение к базе данных по тайм-ауту, чтобы я мог спокойно отлаживать свои тесты?


person Topher Hunt    schedule 29.11.2016    source источник


Ответы (1)


Об этом упоминается в часто задаваемых вопросах по Ecto.Adapters.SQL.Sandbox. проблема и объясняет, что вы можете добавить параметр :ownership_timeout в конфигурацию вашего репо, чтобы указать, как долго соединения с базой данных должны оставаться открытыми до истечения времени ожидания. Я установил для себя 10 минут (только тестовая среда), поэтому мне больше никогда не придется об этом думать:

# config.test.exs

config :rumbl, Rumbl.Repo,
  # ...other settings...
  ownership_timeout: 10 * 60 * 1000 # long timeout so pry sessions don't break

Как и ожидалось, теперь я могу пошалить в pry 10 минут, прежде чем увижу эту ошибку.

person Topher Hunt    schedule 29.11.2016
comment
Кроме того: ExUnit.configure(timeout: :infinity) и/или iex -S mix test --trace – это альтернативы по всему миру. - person Aleksei Matiushkin; 30.11.2016
comment
Спасибо за этот совет; Я не пробовал ExUnit.configure(timeout: :infinity), однако могу подтвердить, что iex -S mix test --trace предотвращает тайм-аут request, но не предотвращает тайм-аут db connection (см. шаги, которые я пробовал в вопросе выше ). Интересно, следует ли рассматривать это как ошибку? - person Topher Hunt; 30.11.2016
comment
Без понятия. Наверное да, но я не уверен. - person Aleksei Matiushkin; 30.11.2016
comment
Для справки, ExUnit.configure(timeout: :infinity) у меня не сработало, но установка ownership_timeout сработала. - person John Hamelink; 27.09.2017