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

What is the correct way to start `:pg`'s default scope in an Elixir 1.12 application?

OTP 24 中删除了 :pg2 模块。它的替代品是 :pg。根据 documentation:

Default scope pg is started automatically when kernel(6) is configured to do so.

从基于 mix 的 Elixir 1.12 应用程序中,配置内核以自动启动默认 :pg 作用域的正确方法是什么?到目前为止,我一直在这样做,但似乎真的 hack-y 使得编写没有 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