Заполните таблицу ETS при запуске приложения
Я пытаюсь создать эликсир / эрланг 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
Я делаю логи, и это логи. Любая идея, как заполнить и затем получить доступ при запуске приложения?
1 ответ
Если вы просто хотите создать таблицу и заполнить ее один раз (без привязки к другому подпроцессу, например, GenServer
), вы можете просто сделать это прямо в start/2
обратный вызов вашего приложения:
def start(_type, _args) do
# Create ETS Table here
# and seed it with initial data
# Other stuff...
end
Если вы хотите сделать это исключительно при запуске подпроцесса, вы можете создать / заполнить его в init/1
Перезвоните. Вот как это будет выглядеть для GenServer:
defmodule DataToETS do
def start_link(_args) do
GenServer.start_link(__MODULE__, :ok, name: __MODULE__)
end
def init(:ok) do
# Create ETS Table here
# and seed it with initial data
:ok
end
end
Это будет похоже на другие процессы, такие как Supervisor, Task, GenStage и т. Д.