bubiche
Goth process not started for Phoenix application
I have something like below in my application.ex
children = [
{Goth, name: MyApp.Goth},
MyApp.SomeService,
MyApp.Endpoint
]
opts = [strategy: :one_for_one, name: MyApp.Supervisor]
Supervisor.start_link(children, opts)
SomeService looks like this:
defmodule MyApp.SomeService do
use GenServer
def start_link(opts \\ []) do
GenServer.start_link(__MODULE__, opts)
end
def init(args) do
{:ok, _} = Application.ensure_all_started(:goth)
with token <- Goth.fetch!(MyApp.Goth) do
# Use token, i.e. use it to fetch stuff from Google Cloud Secret Manager
end
{:ok, args}
end
end
With the code above I get this error:
** (Mix) Could not start application myapp: exited in: MyApp.Application.start(:normal, [])
** (EXIT) exited in: GenServer.call({:via, Registry, {Goth.Registry, MyApp.Goth}}, :fetch, 5000)
** (EXIT) no process: the process is not alive or there's no process currently associated with the given name, possibly because its application isn't started
Is the call to Application.ensure_all_started not enough. Am I using goth and supervisor wrongly?
Most Liked
wojtekmach
This is unexpected, the usage seems correct. Could you create a brand new mix project with just goth and verify it works? And then brand new Phoenix project with just goth?
Application.ensure_all_started(:goth) should not be needed if you add goth to your deps:
defp deps do
[
# ...
{:goth, "~> 1.4"},
# ...
]
end
wojtekmach
I don’t think that’d work. I don’t know off the top my head when exactly child_spec/1 is being called by supervisor, ie whether it say computes all child specs first it calls them as it goes, but I have a feeling it is as if we wrote:
Goth.fetch!(MyGoth)
children = [
{Goth, name: MyGoth},
]
which obviously won’t work
Last Post!
bubiche
Something like this should work right? (Goth.fetch should be called only after the Goth process started):
In application.ex
children = [
{Goth, name: MyApp.Goth},
MyApp.SomeService,
MyApp.BadService,
MyApp.Endpoint
]
opts = [strategy: :one_for_one, name: MyApp.Supervisor]
Supervisor.start_link(children, opts)
BadService:
defmodule MyApp.BadService do
use Supervisor
def start_link(init_arg) do
Supervisor.start_link(__MODULE__, init_arg, name: __MODULE__)
end
@impl true
def init(_init_arg) do
children =
with token <- Goth.fetch!(MyApp.Goth) do
for index <- 0..10 do
# use token here
end
end
Supervisor.init(children, strategy: :one_for_one)
end
end
It works for me but I’m not sure if I miss anything. Thank you for helping me get this far!
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
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex









