【发布时间】:2018-08-10 07:19:35
【问题描述】:
我在我的 phoenix 项目的构建版本中从 exrm 切换到 distillery。一切正常。当我这样做时
iex -S mix phx.server
应用程序运行,一切都与数据库连接。但构建版本未与数据库连接。 (我认为除了为 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}]}]}].
这里有什么问题?它没有与数据库连接,我做错了什么?
【问题讨论】:
-
问题不在于它有错误的数据库设置,问题是您的生产数据库不知何故被用户连接超载,消息中清楚地说明了这一点。你拥有数据库吗?可以体检吗?至少重启一下服务器?
-
数据库在服务器本地。如您所见
postgres://localhost/evercam_dev是的,我拥有数据库。并且没有其他应用程序尝试连接它 -
这通常意味着您没有正确断开连接,PostgeSQL 希望您断开客户端连接。目前简单的服务器重启应该会有所帮助。
-
我做了但结果一样,我什至重新启动了整个服务器。
-
啊。我想我已经发现了:您的生产
ecto有一个不懒惰的 80+100 工人池,默认 PostgreSQLmax_connections是 AFAIR 100。尝试减少ecto的池大小或增加max_connectionspostgresql.conf到 200+。
标签: elixir phoenix-framework distillery