bubiche

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

wojtekmach

Hex Core Team

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

wojtekmach

Hex Core Team

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

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!

Where Next?

Popular in Questions Top

joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 records...
New
hariharasudhan94
I would like to know what is the best IDE for elixir development?
New
Emily
I have VueJS GUIs with the project generated using Webpack. I have Elixir modules that will need to be used by the VueJS GUIs. I forese...
New
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
sen
Hi All, I set a environment variables in dev.exs , like below code. when i start server, how can i set the ${enable} value? thanks. d...
New
shijith.k
I am trying to start a new phoenix project with elixir 1.9, but mix phx.new does not work. It says that ** (Mix) The task "phx.new" could...
New
albydarned
Hello all! I am typing this post from my new MacBook Pro with the M1 chip. I’m loving it so far, and will probably use it as my daily dr...
New

Other popular topics Top

baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
Darmani72
If I have a post route which an argument: post /my_post_route/:my_param1, MyController.my_post_handler How would get the post params ...
New
greenz1
I have a phoenix application from which a user can download multiple(5-6) files of size 1MB. I couldn’t find anything related to sending ...
New
gausby
I asked this very same question on twitter and got some interesting feedback, but I thought it would be a good question to ask here as we...
1207 40165 209
New
msaraiva
Surface is an experimental library built on top of Phoenix LiveView and its new LiveComponent API that aims to provide a more declarative...
564 44265 214
New

We're in Beta

About us Mission Statement