使用Elixir应用程序。有一个Scraper函数,可通过Postgrex驱动程序将数据从Google Spreadsheet复制到postgres数据库。通过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开发人员,只是帮助客户安装应用程序以进行演示。我的问题是:
答案 0 :(得分:1)
使用postgrex发出查询时,最后一个参数可以是选项的关键字列表。
Postgrex.query!(pid, "AN SQL STATEMENT;", [], timeout: 50_000, pool_timeout: 40_000)
答案 1 :(得分:1)
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
中删除所有内容并重新编译应用程序以使该值实际应用。