【问题标题】:How to set application_name for postgres connections in Elixir如何在 Elixir 中为 postgres 连接设置 application_name
【发布时间】:2022-02-07 21:52:32
【问题描述】:

config.exs 中的以下代码会将 postgresql 中的 application_name 设置为“myapp”。如何改用 Elixir 节点名称? (此处使用 Kernel.node 会导致参数错误)

config :db, DB.Repo,
  adapter: Ecto.Adapters.Postgres,
  database: "ahv2",
  username: "troy",
  password: "pass",
  hostname: "localhost",
  parameters: [
    {:application_name, "myapp"}
  ]

【问题讨论】:

    标签: elixir ecto


    【解决方案1】:

    您可以使用在 v2.1.0 中添加到 Ecto 的 init/2 回调。下面的代码应该可以工作(但我没有测试过)。您需要在use Ecto.Repo, ... 之后将其添加到您的Repo 模块中

    def init(_, config) do
      {:ok, put_in(config, [:parameters, :application_name], Node.self |> to_string)}
    end
    

    【讨论】:

    • 调用 Node.self int 回调会导致与使用配置相同的错误
    • (ArgumentError) argument error :erlang.iolist_size,我的 Elixir foo 越来越好,我意识到 Node.self 返回了一个原子。我编辑并接受了您的回答
    • 啊,是的,节点在 Erlang VM 中被表示为原子。感谢您的编辑!
    【解决方案2】:

    将元组中的参数内的 application_name 类型更改为列表来完成这项工作,它对我有用。

    config :db, DB.Repo,
      adapter: Ecto.Adapters.Postgres,
      database: "ahv2",
      username: "troy",
      password: "pass",
      hostname: "localhost",
      parameters: [
        application_name, "myapp"
      ]
    

    【讨论】:

      猜你喜欢
      • 2013-03-19
      • 1970-01-01
      • 2023-04-01
      • 2013-10-04
      • 2013-03-21
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      相关资源
      最近更新 更多