Заполните таблицу ETS при запуске приложения - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь создать таблицу эликсира / эрланга 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 Ответ

0 голосов
/ 18 октября 2018

Если вы просто хотите создать таблицу и заполнить ее один раз (без привязки к другому подпроцессу, например GenServer), вы можете просто сделать это напрямую в обратном вызове start/2 вашегоapplication:

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 и т. Д. ...

...