酿酒厂内部版本未与Postgresql Elixir Phoenix连接

时间:2018-08-10 07:19:36

标签: elixir phoenix-framework distillery

在phoenix项目的构建版本中,我从exrm切换到distillery。一切正常。当我这样做

iex -S mix phx.server

应用程序运行,所有内容都与DB连接。但是构建版本未与数据库连接。 (我认为除了构建命令以获取db的dev值之外,还可以执行上述命令。)

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}]}]}].

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

1 个答案:

答案 0 :(得分: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

This answer也可能有用。