Currently, I have Phoenix version 1.2.1 installed. If I want to upgrade Phoenix on my Mac to version 1.2.3 or 1.3.0-rc.1, what would be the best to do this? Surprisingly, I couldn’t find much information on this. Also, are there any version management tools for Elixir/Phoenix like there are in Ruby?
If you’re asking how to upgrade the phoenix new project installer, you can run mix local.phoenix (now mix local.phx as of RC) and it will grab the latest one and install it so your mix phx.new task will be up to date.
Might be worth adding that checking the diff via PhoenixDiff.org between the versions you are upgrading from and to, and syncing the changes to your app could be valuable for codebase maintability.
I’m new to Phoenix and Elixir. I recently got involved in a Phoenix api project which was build ages ago. It has the following versions:
Phoenix 1.3.0.
Elixir 1.5.1
I follow the instructions provided by the previous developer and tried to run the project. However I can’t install the older version of Elixir and Erlang to test the api. It left me to upgrade the phoenix project to 1.6.15. I followed @chrismccord guide and also followed [phoenixdiff](https://phoenixdiff.org/?source=1.3.0&source_variant=default&target=1.6.15&target_variant=default) and successfully migrated and ran the server.
Upon running the server, I ran into so many problems. If I tried to access the any endpoints, I run into 500 Internal Server Error. Not sure what is exactly going on and unable to figure It out how to debug the code and so. Sorry for being a newbie.
Any help on what maybe wrong and why am I getting the Error code: 500? Any helping hands?
[info] GET /api/me
[debug] Processing with Pxrfd.Web.UserController.me/2
Parameters: %{}
Pipelines: [:api]
[info] Sent 500 in 120ms
[error] #PID<0.988.0> running Pxrfd.Web.Endpoint (connection #PID<0.987.0>, stream id 1) terminated
Server: localhost:8000 (http)
Request: GET /api/me
** (exit) an exception was raised:
** (FunctionClauseError) no function clause matching in Keyword.get/3
(elixir 1.14.2) lib/keyword.ex:388: Keyword.get(:default, :key, nil)
(guardian 2.3.1) lib/guardian/plug.ex:373: Guardian.Plug.fetch_key/2
(guardian 2.3.1) lib/guardian/plug.ex:141: Guardian.Plug.current_resource/2
(pxrfd 0.1.0) lib/pxrfd/web/controllers/load_resource.ex:30: Pxrfd.Plug.LoadResource.call/2
(pxrfd 0.1.0) Pxrfd.Web.Router.api/2
(pxrfd 0.1.0) lib/pxrfd/web/router.ex:1: Pxrfd.Web.Router.__pipe_through1__/1
(phoenix 1.6.15) lib/phoenix/router.ex:346: Phoenix.Router.__call__/2
(pxrfd 0.1.0) lib/plug/error_handler.ex:80: Pxrfd.Web.Router."call (overridable 3)"/2
(pxrfd 0.1.0) lib/pxrfd/web/router.ex:1: Pxrfd.Web.Router.call/2
(pxrfd 0.1.0) lib/pxrfd/web/endpoint.ex:1: Pxrfd.Web.Endpoint.plug_builder_call/2
(pxrfd 0.1.0) lib/pxrfd/web/endpoint.ex:1: Pxrfd.Web.Endpoint."call (overridable 3)"/2
(pxrfd 0.1.0) lib/pxrfd/web/endpoint.ex:1: Pxrfd.Web.Endpoint.call/2
(phoenix 1.6.15) lib/phoenix/endpoint/cowboy2_handler.ex:54:
The surface cause: Guardian.Plug.fetch_key was given the atom :default where it expected a Map of options, and crashed.
The root cause appears to be a function call in load_resource.ex that looks something like current_resource(conn, :default); that API changed to current_resource(conn, opts) a long time ago.
$ mix local.phx
** (Mix) The task "local.phx" could not be found. Did you mean "local.hex"?
I later checked on another machine and it behaved differently there. No idea what is the difference between both machines, which could affect mix behaviour. Erlang/Elixir installed on both with the same versions mix phx.new works on both normally…
Sorry to be clear, you said that the “different approach” works on one machine but not another. The code and error you’re showing aren’t the new approach.
mix local.phx is installed by phx_new. So it expectedly only works if you already have phx_new installed and want to update it. The archive install version works no matter if you have phx_new installed yet or not. It‘s install or optionally update. I‘m wondering if you ran into that.
I understand (that’s why I wrote that “it’s a different approach” - with “archive”), but I do have it installed, I can generate new applications, etc. yet it does not respond to the mix local.phx, which is why I got puzzled. Must be some local installation intricacies