我正在尝试创建一个elixir / erlang ets
表,并在应用程序启动时为其填充一些数据。我看到它在启动时就运行了,但是可能是编译/运行时错误?
例如:
def start(_type, _args) do
import Supervisor.Spec
# Define workers and child supervisors to be supervised
children = [
DataToETS,
]
opts = [strategy: :one_for_one, name: App.Supervisor]
Supervisor.start_link(children, opts)
end
然后是DataToETS
:
defmodule DataToETS do
use Task
def start_link(opts) do
Task.start_link(DataToETS, :run, [])
end
def run do
# Load to the ETS
end
end
在我的DataToETS
中,我会记录日志。知道如何在应用程序运行时填充然后访问吗?
答案 0 :(得分:3)
如果您只想创建一个表并填充一次(不附加到另一个子流程,例如GenServer
),则可以直接在{{1 }}您的应用程序的回调:
start/2
如果要在启动子流程时专门执行此操作,,则可以在其def start(_type, _args) do
# Create ETS Table here
# and seed it with initial data
# Other stuff...
end
回调中创建/填充它。这是GenServer的外观:
init/1
对于其他过程,例如Supervisor,Task,GenStage等,