在 Elixir 1.12 应用程序中启动 `:pg` 的默认范围的正确方法是什么?

问题描述

在 OTP 24 中移除了 :pg2 模块。它的替代品是 :pg。根据{{​​3}}:

默认范围 pg 在配置 kernel(6) 时自动启动。

从基于混合的 Elixir 1.12 应用程序中,配置内核以自动启动默认 :pg 范围的正确方法是什么?到目前为止,我一直在这样做,但它似乎真的让编写没有 start/2 函数的库代码变得不可能:

defmodule MyApp do
  use Application

  def start(_type,_args) do

    # Ew,gross:
    {:ok,_pid} = :pg.start_link()

    children() |> Supervisor.start_link([strategy: :one_for_one,name: __MODULE__])
  end

  def children,do: []
end

解决方法

您可以为该模块编写自己的 child_spec

defmodule MyApp do
  use Application

  def start(_type,_args) do
    Supervisor.start_link(children(),strategy: :one_for_one,name: __MODULE__)
  end

  defp children,do: [pg_spec()]

  defp pg_spec do
    %{
      id: :pg,start: {:pg,:start_link,[]}
    }
  end
end

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...