【发布时间】:2019-01-03 13:56:33
【问题描述】:
有时当我的 Ecto 迁移在 CI 中运行时(从头开始构建数据库,有时会出现不是由我们的代码引起的长时间停顿),它们会超时,并出现如下错误:
10:05:01.828 [error] Postgrex.Protocol (#PID) 已断开连接:** (DBConnection.ConnectionError) owner #PID 超时,因为它拥有连接的时间超过15000毫秒
我可以通过将:timer.sleep(15_000) 添加到任何单独的迁移来在本地重现此问题。我还可以通过向几个不同的迁移添加更短的 timer.sleep/1 调用来重现它,这似乎表明运行所有迁移都有一个时间限制。
我可以通过为 repo 配置 ownership_timeout 在本地解决此问题:
config :my_app, MyApp.Repo,
# ...other configurations...
ownership_timeout: 60_000 # or whatever
使用此设置,即使使用上面的 :timer.sleep/1 调用,迁移也会成功运行。但我不希望在大多数情况下应用此设置。
如何在运行迁移时指定 :ownership_timeout 以仅使用?
【问题讨论】: