【问题标题】:How catch MySQL error in Repo.start_link (Phoenix\Elixir)如何在 Repo.start_link (Phoenix\Elixir) 中捕获 MySQL 错误
【发布时间】:2022-03-16 04:38:04
【问题描述】:

当我使用不正确的凭据执行 Repo.start_link 时,我得到了状态 :ok

{state, pid} = 
      MyApp.Repo.start_link(
        name: nil,
        hostname: hostname,
        username: username,
        password: password,
        database: db_name,
        pool_size: 1
      )

状态和 pid = {:ok, #PID}

但在我得到的日志中

[error] MyXQL.Connection (#PID<0.554.0>) failed to connect: ** (MyXQL.Error) (1045) (ER_ACCESS_DENIED_ERROR) Access denied for user 'username'@'localhost' (using password: YES)

如何在 {state, pid} 中获得错误消息?

【问题讨论】:

  • 你是说这个错误直到某个时候才会出现?比如当你尝试做手术的时候?您能否包括导致错误的确切代码?
  • 是的。尝试选择数据时Repo.one(from d ...
  • 您应该在示例中包含有问题的代码以帮助添加上下文。
  • 问题是为什么 Repo.start_link 数据不正确(例如密码错误)返回:ok。我不知道这是否是正常行为。

标签: mysql elixir phoenix-framework ecto repo


【解决方案1】:

你可以不带名字启动另一个Repo,但不能直接访问,所有操作都发送到默认仓库Myapp.Repo

您也可以通过显式设置来启动不带名称的存储库 名称为零: MyApp.Repo.start_link(名称:无,主机名:“temp.example.com”) 但是,一旦存储库启动,您就无法直接与 它,因为MyApp.Repo 中的所有操作默认发送到名为MyApp.Repo 的存储库。

来源:https://github.com/elixir-ecto/ecto/blob/v3.6.2/lib/ecto/repo.ex#L554

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 2016-05-29
    相关资源
    最近更新 更多