jhefreyzz
Running GenServer only once
I created a GenServer to keep track of the current index in case the client reconnects to the socket. I intend to only use one GenServer.
I can make the GenServer start automatically by adding it to the children list of supervisor but my GenServer state is depended on the result of a query so I cannot put it there.
children = [
# Start the Ecto repository
Senti.Repo,
...
{Senti.QuestionState, [%{}]}
]
I started the GenServer in my join callback. I’m aware that the start_link will always be called when there are new clients connected but I have no idea where should I put this one.
I have my code below to describe more about my issue.
def join("session:" <> session_id, _payload, socket) do
presentation_state = Questionnaire.get_presentation_info(session_id)
{:ok, _pid} = QuestionState.start_link(question_state(presentation_state))
question_index = QuestionState.get_next_question_index() || 0
{:ok, %{presentation: presentation_state, current_index: question_index}, socket}
end
If information provided above is insufficient, I will update it ASAP.
Thank you.
Marked As Solved
mudasobwa
Application.start_phase/3 seems to be a good fit. Add a DynamicSupervisor to the main supervision tree and make it start and supervise your GenServer in the start_phase.
Also Liked
lud
I am not sure you need start_phase at all. You can query your repo in the init of your GenServer and that will be executed before the supervisor starts the next child.
So you can start your repo, start the GenServer that depends on your repo, and then start the rest of the app (web stack with channels).
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance










