1

我为我的凤凰项目从构建版本切换exrm到了内部版本。distillery一切正常。当我做

iex -S mix phx.server

应用程序运行,一切都与数据库连接。但构建版本未与数据库连接。(我认为除了构建其获取 db 的开发值之外,还执行上述命令。)

2018-08-10 08:59:19.160 [error] Postgrex.Protocol (#PID<0.2803.0>) failed to connect: ** (Postgrex.Error) FATAL 53300 (too_many_connections): remaining connection slots are reserved for non-replication superuser connections

当我看到/opt/evercam_media/releases/1.0.1/sys.config文件时,它为我提供了正确的数据库值,用于数据库连接

       {mode,prod}]},
  {'Elixir.EvercamMedia.Repo',
      [{adapter,'Elixir.Ecto.Adapters.Postgres'},
       {types,'Elixir.EvercamMedia.PostgresTypes'},
       {url,<<"postgres://localhost/evercam_dev">>},
       {socket_options,[{keepalive,true}]},
       {timeout,60000},
       {pool_timeout,60000},
       {pool_size,80},
       {lazy,false},
       {ssl,true}]},
  {'Elixir.EvercamMedia.SnapshotRepo',
      [{adapter,'Elixir.Ecto.Adapters.Postgres'},
       {url,<<"postgres://localhost/evercam_dev">>},
       {socket_options,[{keepalive,true}]},
       {timeout,60000},
       {pool_timeout,60000},
       {pool_size,100},
       {lazy,false},
       {ssl,true}]}]}].

这里有什么问题?它没有与数据库连接,我做错了什么?

4

1 回答 1

0

造成这种情况的原因是您的应用程序有两个存储库,它们都使用非惰性连接池,总大小为 180。

PostgreSQL 的默认设置是 100 个并发客户端连接。

你有两个选择:

max_connections设置postgresql.conf增加到 200

max_connections = 200
shared_buffers = 50MB

减少ecto连接池

config :ymy_app, EvercamMedia.Repo,
  adapter: Ecto.Adapters.Postgres,
  ...
  pool_size: 40

这个答案也可能有用。

于 2018-08-10T08:08:03.353 回答