Mix Ecto.Setup 返回 Postgrex.Protocol 错误“用户密码身份验证失败”

问题描述 投票:0回答:1

我是 Phoenix/Elixir 和 Docker 的新手。

我一直在关注 YouTube 上的一个教程,其中我们在 Docker Desktop 容器中设置 PostgreSQL 并使用凭据配置它,然后应该将所述凭据插入到我们的 Elixir 项目 dev.exs 文件中。我已经完成了上述所有操作,当我运行 mix ecto.setup (或 ecto.create)时,我得到以下输出:

11:50:08.883 [error] Postgrex.Protocol (#PID<0.188.0>) failed to connect: ** (Postgrex.Error) FATAL 28P01 (invalid_password) password authentication failed for user "backend_stuff"

11:50:08.920 [error] Postgrex.Protocol (#PID<0.196.0>) failed to connect: ** (Postgrex.Error) FATAL 28P01 (invalid_password) password authentication failed for user "backend_stuff"
** (Mix) The database for ElixirGist.Repo couldn't be created: killed

这是我的 dev.exs 文件:

config :elixir_gist, ElixirGist.Repo,
  username: "backend_stuff",
  password: "WAOdktQ3rPbPSK3kqPQpask1",
  hostname: "localhost",
  port: "5432",
  database: "elixir_gist_dev",
  stacktrace: true,
  show_sensitive_data_on_connection_error: true,
  pool_size: 10

我已尝试访问 Docker 容器 (bs_db) 并已使用上述凭据成功进行身份验证,因此问题不是凭据。在ChatGPT的建议下,我还修改了我的“pg_hba.conf”并将“METHOD”更改为md5。

它提出的另一个建议是在 Docker 中自己创建数据库,但如果我理解正确的话,ecto.create / ecto.setup 应该处理这一步,所以我想找出那里出了什么问题。

postgresql docker elixir elixir-mix
1个回答
0
投票

您在故障排除方面已经取得了一些良好的进展!让我们集中精力进一步缩小问题范围。首先,通过在终端中使用

docker ps
检查来确保 PostgreSQL 容器正在运行。然后,仔细检查用于从 Elixir 项目访问数据库的凭据,确保没有拼写错误或配置错误。如果数据库没有自动创建,请尝试在 PostgreSQL 容器内手动创建它。检查容器日志中是否有任何可能提供线索的错误或警告。确保
pg_hba.conf
文件中的身份验证方法允许基于密码的身份验证。验证
dev.exs
中的 Elixir 项目配置不冲突,并且没有环境变量覆盖它们。最后,进行任何更改后,请记住重新启动 Elixir 应用程序和 PostgreSQL 容器以应用它们。遵循这些步骤应该可以帮助您查明并解决问题。如果您仍需要帮助,请随时提供更多详细信息或寻求进一步帮助!

© www.soinside.com 2019 - 2024. All rights reserved.