Я пытаюсь создать «Подогрев кеша» для запуска ОДИН РАЗ при запуске приложения, вызывая модуль genServer «Кэш»
Я создал некоторый код:
GenServer «Cache Warmer», который используется для обработки одного асинхронного вызова при запуске приложения, настроен с помощью [restart:: временный]. Основная идея - возврат {: stop,: normal, state} после приведения, чтобы остановить процесс
defmodule TlgmBot.Application do
...
def start(_type, _args) do
...
children = [
... some stuff ...
%{
id: Services.Cache.CacheWarmer,
start: {Services.Cache.CacheWarmer, :start_link, [restart: :temporary]},
type: :supervisor
}
%{
id: Services.Cache.Cache,
start: {Services.Cache.Cache, :start_link, []},
type: :supervisor
},
end
end
defmodule Services.Cache.CacheWarmer do
use GenServer
def start_link(_state \\ []) do
GenServer.start_link(__MODULE__, [:ok], name: __MODULE__)
end
def handle_cast({:warm_up_cache}, state) do
debug "loading users..."
load_users()
debug "done."
load_mfc()
{:stop, :normal, state}
end
defp load_users() do
result = RedmineApi.request_rm_users()
case result do
{:ok, users} -> Cache.save_users(users)
{:ok}
_ -> {:error}
end
end
end
И процесс «Подогрев кеша» продолжает работать снова и снова
Пожалуйста, укажите мне, как правильно выполнить эту задачу, или помогите мне выяснить, что я здесь делаю неправильно.
Может быть, я должен добавить пару строк в application.start (), чтобы вызвать модуль кеша здесь и забыть об этом?