Logs full with (ArgumentError) unknown registry: RumblWeb.PubSub

Hi,

after updating to Phoenix 1.5 and follwing the upgrade plan, my logs are full with:

[error] an exception was raised:
    ** (ArgumentError) unknown registry: RumblWeb.PubSub
        (elixir 1.12.0) lib/registry.ex:1332: Registry.info!/1
        (elixir 1.12.0) lib/registry.ex:985: Registry.register/3
        (phoenix_pubsub 2.0.0) lib/phoenix/pubsub.ex:117: Phoenix.PubSub.subscribe/3
        (phoenix 1.5.9) lib/phoenix/channel/server.ex:420: Phoenix.Channel.Server.init_join/3
        (phoenix 1.5.9) lib/phoenix/channel/server.ex:378: Phoenix.Channel.Server.channel_join/4
        (phoenix 1.5.9) lib/phoenix/channel/server.ex:298: Phoenix.Channel.Server.handle_info/2
        (stdlib 3.15) gen_server.erl:695: :gen_server.try_dispatch/4
        (stdlib 3.15) gen_server.erl:771: :gen_server.handle_msg/6

application.ex

defmodule Rumbl.Application do
  use Application

  # See https://hexdocs.pm/elixir/Application.html
  # for more information on OTP Applications
  def start(_type, _args) do
    import Supervisor.Spec

    # Define workers and child supervisors to be supervised
    children = [
      {Phoenix.PubSub, name: Rumbl.PubSub},
      # Start the Ecto repository
      supervisor(Rumbl.Repo, []),
      # Start the endpoint when the application starts
      supervisor(RumblWeb.Endpoint, []),
      # Start your own worker by calling: Rumbl.Worker.start_link(arg1, arg2, arg3)
      # worker(Rumbl.Worker, [arg1, arg2, arg3]),
    ]

    # See https://hexdocs.pm/elixir/Supervisor.html
    # for other strategies and supported options
    opts = [strategy: :one_for_one, name: Rumbl.Supervisor]
    Supervisor.start_link(children, opts)
  end

  # Tell Phoenix to update the endpoint configuration
  # whenever the application is updated.
  def config_change(changed, _new, removed) do
    RumblWeb.Endpoint.config_change(changed, removed)
    :ok
  end
end

config.exs (partial)

config :rumbl,
  namespace: Rumbl

config :rumbl, ecto_repos: [Rumbl.Repo]

# Configures the endpoint
config :rumbl, RumblWeb.Endpoint,
  url: [host: "//*.mydomain.io"],
  # root: Path.dirname(__DIR__),
  secret_key_base: "123",
  render_errors: [view: RumblWeb.ErrorView, format: "json", accepts: ~w(html json)],
  pubsub_server: RumblWeb.PubSub

# Configures Elixir's Logger
config :logger, :console,
  format: "$time $metadata[$level] $message\n",
  metadata: [:request_id]

config :phoenix, :json_library, Jason

# Configure phoenix generators
config :phoenix, :generators,
  migration: true,
  binary_id: false

What can i do?

thanks

Maybe in config.exs try changing

pubsub_server: RumblWeb.PubSub

to

pubsub_server: Rumbl.PubSub

?

2 Likes

thanks, but not working
unknown registry: Rumbl.PubSub

You have an old syntax for your application.ex

Maybe try like this…

  def start(_type, _args) do
    # Define workers and child supervisors to be supervised
    children = [
      {Phoenix.PubSub, name: Rumbl.PubSub},
      # Start the Ecto repository
      Rumbl.Repo,
      # Start the endpoint when the application starts
      RumblWeb.Endpoint,
      # Start your own worker by calling: Rumbl.Worker.start_link(arg1, arg2, arg3)
      # worker(Rumbl.Worker, [arg1, arg2, arg3]),
    ]

    # See https://hexdocs.pm/elixir/Supervisor.html
    # for other strategies and supported options
    opts = [strategy: :one_for_one, name: Rumbl.Supervisor]
    Supervisor.start_link(children, opts)
  end

Hi @Max,

Since name of PubSub is Rumbl.PubSub right now, you also need to changed name in functions where you call it, in this case function for subscribing the caller to the PubSub adapter’s topic.

I found another thread where the same issue is discussed from #14 down. It seems the module naming conventions in the book are a little outdated now - but it’s easily fixable!

6 Likes

Thank you all for your help. Apart from your suggestions i also had an old code in mix:

  def application do
    [mod: {Rumbl, []}, extra_applications: [:logger]]
  end

needs to be

  def application do
    [mod: {Rumbl.Application, []}, extra_applications: [:logger]]
  end

But the app worked all the time before. So not sure where i missed the change.

2 Likes