sparkertime

sparkertime

My Phoenix app has a variety of scopes distinguished by host as follows:

  scope "/", LockerWeb, host: "host.example.com" do
    pipe_through :inertia

    get "/", HostController, :index
    get "/connect", HostController, :connect
  end

  scope "/", LockerWeb, host: "play.example.com" do
    pipe_through :browser

    get "/", PageController, :landing
    post "/access", PageController, :access

    get "/join", PageController, :show_join
    post "/join", PageController, :do_join
  end

Is there a better option for routes than my own homegrown replacement of VerifiedRoutes? AFAICT it doesn’t take the hostnames of scopes into consideration.

I suspect the robust solution here would be multiple endpoints, perhaps in an umbrella app, but this is already a teensy application that will perhaps max out at two dozen routes.

Thanks!

Showing Posts 1 to 4

sparkertime

sparkertime OP

Thanks! The inbound routing part works fine with scopes in a router - it’s just that I’m not sure about the best way to build links in my app via routes. Would your approach impact how links are constructed via routes ala VerifiedRoutes ?

Schultzer

Schultzer

You can still use verified routes and changing the host in the conn.

Setting the host in the router, if you are only dealing with subdomains is great, but if the host can be more dynamic, then it might be easier to set them in the conn in your endpoint per request . If your app is running on multiple servers with their own domain then you can let your load balancer deal with it and keep your app dumb.

Phoenix.VerifiedRoutes — Phoenix v1.8.8 Phoenix.Controller — Phoenix v1.8.8

sparkertime

sparkertime OP

Appreciate the response. I’m probably either misunderstanding and/or I haven’t explained my issue very well.

In the example above, the verified route ~p"/" could refer to two different controllers and two different actions. In a single response, I need to build links that could refer to either - some links in a page point to host.example.com routes from play.example.com and some won’t.

I’m not sure I could set the host on a per-conn basis because of this intermixing of links within a single response. Perhaps you mean setting the host on the conn when passing it into the url methods?

Right now, my solution is a new function, cross_domain_url that accepts a host parameter that is derived from the same keys in config.exs that drive the hostnames on the scopes. It works, but I’m just curious if there’s something I’m missing in how routes are supposed to work when combined with scopes with hosts.

For example, mix phx.routes generates a number of duplicated routes because it isn’t taking the scope’s hosts into account

  GET   /                                      LockerWeb.HostController :index
  GET   /                                      LockerWeb.PageController :show_join
Schultzer

Schultzer

url/3 takes more then a conn, you can use conn, socket, endpoint or uri. I’ll admit I purposely did not give you an exact answer, but a more general one. The main point is, nothing stopping you from using verified routes with highly dynamic host and url generations.

— All posts loaded —

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
achenet
Hello, I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind. However, when I launch mix phx.server, I get an error...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
Cxx-mlr
I’m working on a small exercise involving update_in/3, and I came up with this solution: data = %{ name: "Periodic Table", category:...
New
ChrisAmelia
I’ve got trouble wrapping my head around the order in which functions are called in this snippet (from Phoenix’s authentication): toke...
New
dillonoconnor
Is there any way to avoid the Hologram compiler running when using iex? It seems like the front-end code could potentially be disregarded...
New
thiagogsr
** (ArgumentError) expected :max_attempts to be a positive integer, got: {:@, [line: 10, column: 19], [{:max_attempts, [line: 10, column:...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews