问题描述
在 OTP 24 中移除了 :pg2
模块。它的替代品是 :pg
。根据{{3}}:
从基于混合的 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