# Goth process not started for Phoenix application

**URL:** <https://forum.elixirforum.com/t/goth-process-not-started-for-phoenix-application/68687>\
**Category:** Questions\
**Tags:** supervisor, phoenix, goth\
**Created:** [January 13, 2025, 2:24pm UTC](https://forum.elixirforum.com/t/goth-process-not-started-for-phoenix-application/68687 "2025-01-13T14:24:06Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![bubiche](https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bubiche/32/37224_2.png) [@bubiche](https://forum.elixirforum.com/u/bubiche)\
**Post date:** [January 13, 2025, 2:24pm UTC](https://forum.elixirforum.com/t/goth-process-not-started-for-phoenix-application/68687/1 "2025-01-13T14:24:06Z")

</div>

I have something like below in my `application.ex`

```elixir
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:

```elixir
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:

```elixir
** (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?

---

<div class="post-metadata">

**Author:** ![wojtekmach](https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/wojtekmach/32/999_2.png) [@wojtekmach](https://forum.elixirforum.com/u/wojtekmach)\
**Post date:** [January 13, 2025, 2:59pm UTC](https://forum.elixirforum.com/t/goth-process-not-started-for-phoenix-application/68687/2 "2025-01-13T14:59:04Z")

</div>

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:

```elixir
defp deps do
  [
    # ...
    {:goth, "~> 1.4"},
    # ...
  ]
end

```

---

<div class="post-metadata">

**Author:** ![bubiche](https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bubiche/32/37224_2.png) [@bubiche](https://forum.elixirforum.com/u/bubiche)\
**Post date:** [January 13, 2025, 4:27pm UTC](https://forum.elixirforum.com/t/goth-process-not-started-for-phoenix-application/68687/3 "2025-01-13T16:27:45Z")

</div>

`Application.ensure_all_started(:goth)` was a last ditch effort to make it work but I think it doesn’t matter here.

You are right, brand new mix projects do work for me. When I checked it further it was because of another service which does this:

```elixir
defmodule MyApp.BadService do
  def child_spec(_args) do
    children =
      with token <- Goth.fetch!(MyApp.Goth) do
        for index <- 0..10 do
          # create something with Supervisor.child_spec() and token
        end
      end

    %{
      id: BadSupervisor,
      type: :supervisor,
      start: {Supervisor, :start_link, [children, [strategy: :one_for_one]]}
    }
  end
end

```

I think the manual supervisor setup here broke something, switching it to `use Supervisor` fixed it for me. I wish the error message was able to pinpoint the file though since the service in my original post was the latest addition and it took the blame ☹

---

<div class="post-metadata">

**Author:** ![wojtekmach](https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/wojtekmach/32/999_2.png) [@wojtekmach](https://forum.elixirforum.com/u/wojtekmach)\
**Post date:** [January 13, 2025, 5:00pm UTC](https://forum.elixirforum.com/t/goth-process-not-started-for-phoenix-application/68687/4 "2025-01-13T17:00:03Z")

</div>

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:

```elixir
Goth.fetch!(MyGoth)

children = [
  {Goth, name: MyGoth},
]

```

which obviously won’t work

---

<div class="post-metadata">

**Author:** ![bubiche](https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bubiche/32/37224_2.png) [@bubiche](https://forum.elixirforum.com/u/bubiche)\
**Post date:** [January 14, 2025, 3:45am UTC](https://forum.elixirforum.com/t/goth-process-not-started-for-phoenix-application/68687/5 "2025-01-14T03:45:14Z")

</div>

Something like this should work right? (`Goth.fetch` should be called only after the Goth process started):

In `application.ex`

```elixir
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`:

```elixir
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!
