Elixir version (elixir -v):
elixir -v
Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
Elixir 1.5.1
file_system 0.1.5
connection 1.0.4
gettext 0.13.1
ranch 1.3.2
poolboy 1.5.1
decimal 1.4.0
poison 3.1.0
db_connection 1.1.2
phoenix_pubsub 1.0.2
cowlib 1.0.2
cowboy 1.1.2
mime 1.1.0
plug 1.4.3
phoenix_html 2.10.4
phoenix 1.3.0
phoenix_live_reload 1.1.0
mariaex 0.8.3
ecto 2.2.0
phoenix_ecto 3.2.3
v8.4.05.3.0To get a warning similar to this
warning: this clause cannot match because a previous clause at line 16 always matches
No Warning is produced when defining conflicting routes:
scope "/admin", HelloWeb.Admin, as: :admin do
pipe_through :browser
resources "/reviews", ReviewController
end
scope "/admin", Something, as: :something do
resources "/reviews", ReviewController
end
mix phx.routes produces:
mix phx.routes
Compiling 8 files (.ex)
admin_review_path GET /admin/reviews HelloWeb.Admin.ReviewController :index
admin_review_path GET /admin/reviews/:id/edit HelloWeb.Admin.ReviewController :edit
admin_review_path GET /admin/reviews/new HelloWeb.Admin.ReviewController :new
admin_review_path GET /admin/reviews/:id HelloWeb.Admin.ReviewController :show
admin_review_path POST /admin/reviews HelloWeb.Admin.ReviewController :create
admin_review_path PATCH /admin/reviews/:id HelloWeb.Admin.ReviewController :update
PUT /admin/reviews/:id HelloWeb.Admin.ReviewController :update
admin_review_path DELETE /admin/reviews/:id HelloWeb.Admin.ReviewController :delete
something_review_path GET /admin/reviews Something.ReviewController :index
something_review_path GET /admin/reviews/:id/edit Something.ReviewController :edit
something_review_path GET /admin/reviews/new Something.ReviewController :new
something_review_path GET /admin/reviews/:id Something.ReviewController :show
something_review_path POST /admin/reviews Something.ReviewController :create
something_review_path PATCH /admin/reviews/:id Something.ReviewController :update
PUT /admin/reviews/:id Something.ReviewController :update
something_review_path DELETE /admin/reviews/:id Something.ReviewController :delete
no error or warning are produced
the warning will only be produced the first time you compile the module with duplicate routes. Can you modify the router file ($ touch lib/.../router.ex and rerun the command? You should then see the warning.
I saw a warning yesterday on a new project, so it definitely works.
Yeah, sorry... still not working on my machine. So @PhillippOhlandt is there anything different about my stated versions than yours?
➤ touch lib/hello_web/router.ex
➤ mix phx.routes
Compiling 8 files (.ex)
page_path GET / HelloWeb.PageController :index
hello_path GET /hello HelloWeb.HelloController :index
hello_path GET /hello/:messenger HelloWeb.HelloController :show
user_path GET /users HelloWeb.UserController :index
user_path GET /users/:id/edit HelloWeb.UserController :edit
user_path GET /users/new HelloWeb.UserController :new
user_path GET /users/:id HelloWeb.UserController :show
user_path POST /users HelloWeb.UserController :create
user_path PATCH /users/:id HelloWeb.UserController :update
PUT /users/:id HelloWeb.UserController :update
user_path DELETE /users/:id HelloWeb.UserController :delete
user_post_path GET /users/:user_id/posts HelloWeb.PostController :index
user_post_path GET /users/:user_id/posts/:id/edit HelloWeb.PostController :edit
user_post_path GET /users/:user_id/posts/new HelloWeb.PostController :new
user_post_path GET /users/:user_id/posts/:id HelloWeb.PostController :show
user_post_path POST /users/:user_id/posts HelloWeb.PostController :create
user_post_path PATCH /users/:user_id/posts/:id HelloWeb.PostController :update
PUT /users/:user_id/posts/:id HelloWeb.PostController :update
user_post_path DELETE /users/:user_id/posts/:id HelloWeb.PostController :delete
admin_review_path GET /admin/reviews HelloWeb.Admin.ReviewController :index
admin_review_path GET /admin/reviews/:id/edit HelloWeb.Admin.ReviewController :edit
admin_review_path GET /admin/reviews/new HelloWeb.Admin.ReviewController :new
admin_review_path GET /admin/reviews/:id HelloWeb.Admin.ReviewController :show
admin_review_path POST /admin/reviews HelloWeb.Admin.ReviewController :create
admin_review_path PATCH /admin/reviews/:id HelloWeb.Admin.ReviewController :update
PUT /admin/reviews/:id HelloWeb.Admin.ReviewController :update
admin_review_path DELETE /admin/reviews/:id HelloWeb.Admin.ReviewController :delete
something_review_path GET /admin/reviews Something.ReviewController :index
something_review_path GET /admin/reviews/:id/edit Something.ReviewController :edit
something_review_path GET /admin/reviews/new Something.ReviewController :new
something_review_path GET /admin/reviews/:id Something.ReviewController :show
something_review_path POST /admin/reviews Something.ReviewController :create
something_review_path PATCH /admin/reviews/:id Something.ReviewController :update
PUT /admin/reviews/:id Something.ReviewController :update
something_review_path DELETE /admin/reviews/:id Something.ReviewController :delete
* /jobs BackgroundJob.Plug []
clearly there are duplicate routes here, and clearly there is no warning, even after touching the file.
I mean, I noticed this bug when I was following the tutorial and it was telling me about duplicate route warnings and when I did as the tutorial stated, it didn't warn the first or any other time, so I came up with this example to show the issue.
Close it if you like, but it's no longer working. I remember it worked when I tried Phoenix out about a year ago, but never got to do much more than the tutorial, so I started over because it's been so long.
The behavior has changed or something about a fresh install is causing issues, or maybe it's just something with my shell, for all I know. If I knew how to debug it, I would give you more information.
@RobertDeRose Maybe you hit an edge case. I think it would be the best if you could provide an example git repo with the issue so we can try on our machines.
Can you include your complete router?
I'm also having the same issue as @RobertDeRose. Here is my router which is primarily from following the tutorial.
defmodule HelloWeb.Router do
use HelloWeb, :router
pipeline :browser do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_flash
plug :protect_from_forgery
plug :put_secure_browser_headers
end
pipeline :api do
plug :accepts, ["json"]
end
scope "/", HelloWeb do
pipe_through :browser # Use the default browser stack
get "/", PageController, :index
get "/hello", HelloController, :index
get "/hello/:messenger", HelloController, :show
resources "/reviews", ReviewController
resources "/users", UserController do
resources "/posts", PostController
end
get "/hello", ByeController, :index
end
scope "/", HelloWeb do
pipe_through :browser
get "/", PageController, :index
end
scope "/admin", HelloWeb.Admin, as: :admin do
pipe_through :browser
resources "/reviews", ReviewController
end
end
@chrismccord what @frankmariette included is equal to what I had while following the tutorial
This is potentially an issue related to elixir versions. I'll investigate.
Hitting this issue:
~/hello
❯ mix compile
Compiling 1 file (.ex)
~/hello
❯ mix phx.routes
Compiling 8 files (.ex)
page_path GET / HelloWeb.PageController :index
root_path GET / HelloWeb.RootController :index
hello_path GET /hello HelloWeb.HelloController :index
hello_path GET /hello/:messenger HelloWeb.HelloController :show
~/hello
❯ mix phoenix.new -v
Phoenix v1.3.0
~/hello
❯ elixir -v
Erlang/OTP 20 [erts-9.1.3] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
Elixir 1.5.1
This is an issue in Elixir and should be fixed in the next release. You can check the process here https://github.com/elixir-lang/elixir/issues/6637
@chrismccord should the guides be updated while this is being updated?
I believe it only affects Elixir 1.5 and will be fixed in 1.6 so I think we can hold off
Good news: it is fixed in Elixir master and the v1.5 branch. I plan to release v1.5.3 with a fix this or next week.
Thanks @josevalim and @chrismccord for looking into this and getting it fixed.
Most helpful comment
Good news: it is fixed in Elixir master and the v1.5 branch. I plan to release v1.5.3 with a fix this or next week.