From 432f81df8e5fee9b4887c855ed308c862b8a00f9 Mon Sep 17 00:00:00 2001 From: Clark Kampfe Date: Sun, 21 Aug 2016 14:59:02 -0500 Subject: [PATCH 1/4] bump elixir version --- toolset/setup/linux/languages/elixir.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/toolset/setup/linux/languages/elixir.sh b/toolset/setup/linux/languages/elixir.sh index 21ec3d00299..6040d9ec202 100755 --- a/toolset/setup/linux/languages/elixir.sh +++ b/toolset/setup/linux/languages/elixir.sh @@ -8,11 +8,11 @@ RETCODE=$(fw_exists ${IROOT}/elixir.installed) return 0; } ELIXIR_HOME=$IROOT/elixir -VERSION="1.1.0-1" +VERSION="1.3.2-1" RELEASE="trusty" ARCH="amd64" -fw_get -O http://packages.erlang-solutions.com/site/esl/elixir/FLAVOUR_2_download/elixir_${VERSION}~ubuntu~${RELEASE}_${ARCH}.deb +fw_get -O http://packages.erlang-solutions.com/debian/pool/elixir_${VERSION}~ubuntu~${RELEASE}_${ARCH}.deb dpkg -x elixir_${VERSION}~ubuntu~${RELEASE}_${ARCH}.deb $IROOT/elixir $IROOT/erlang/usr/lib/erlang/Install -minimal $IROOT/erlang/usr/lib/erlang From 2b73f3422d6c9112356916a9f441a1f512844611 Mon Sep 17 00:00:00 2001 From: Clark Kampfe Date: Sun, 21 Aug 2016 15:04:30 -0500 Subject: [PATCH 2/4] bump phoenix application dependencies and upgrade application code to conform to latest application deps versions --- frameworks/Elixir/phoenix/lib/hello/repo.ex | 2 +- frameworks/Elixir/phoenix/mix.exs | 13 +++--- .../web/controllers/page_controller.ex | 40 ++++++++++++++----- .../Elixir/phoenix/web/models/fortune.ex | 6 +-- frameworks/Elixir/phoenix/web/models/world.ex | 6 +-- .../phoenix/web/templates/layout/app.html.eex | 2 +- frameworks/Elixir/phoenix/web/web.ex | 16 +++++--- 7 files changed, 54 insertions(+), 31 deletions(-) diff --git a/frameworks/Elixir/phoenix/lib/hello/repo.ex b/frameworks/Elixir/phoenix/lib/hello/repo.ex index 7f5e8ce30f8..1ff97d6dcad 100644 --- a/frameworks/Elixir/phoenix/lib/hello/repo.ex +++ b/frameworks/Elixir/phoenix/lib/hello/repo.ex @@ -1,3 +1,3 @@ defmodule Hello.Repo do - use Ecto.Repo, otp_app: :hello + use Ecto.Repo, otp_app: :hello end diff --git a/frameworks/Elixir/phoenix/mix.exs b/frameworks/Elixir/phoenix/mix.exs index e1515843e47..918d17487d5 100755 --- a/frameworks/Elixir/phoenix/mix.exs +++ b/frameworks/Elixir/phoenix/mix.exs @@ -3,8 +3,8 @@ defmodule Hello.Mixfile do def project do [app: :hello, - version: "0.0.1", - elixir: "~> 1.1", + version: "0.1.0", + elixir: "~> 1.3", elixirc_paths: elixirc_paths(Mix.env), compilers: [:phoenix] ++ Mix.compilers, build_embedded: Mix.env == :prod, @@ -26,12 +26,11 @@ defmodule Hello.Mixfile do # # Type `mix help deps` for examples and options defp deps do - [{:phoenix, "~> 1.0.3"}, - {:phoenix_ecto, "~> 1.1"}, + [{:phoenix, "~> 1.2"}, + {:phoenix_ecto, "~> 3.0"}, {:postgrex, ">= 0.0.0"}, {:cowboy, "~> 1.0.0"}, - {:phoenix_html, "~> 2.1"}, - {:phoenix_live_reload, "~> 1.0", only: :dev}, - {:exrm, "~> 0.19.8"}] + {:phoenix_html, "~> 2.6"}, + {:phoenix_live_reload, "~> 1.0", only: :dev}] end end diff --git a/frameworks/Elixir/phoenix/web/controllers/page_controller.ex b/frameworks/Elixir/phoenix/web/controllers/page_controller.ex index 1c0a58e39a6..3701b43ce01 100644 --- a/frameworks/Elixir/phoenix/web/controllers/page_controller.ex +++ b/frameworks/Elixir/phoenix/web/controllers/page_controller.ex @@ -4,16 +4,22 @@ defmodule Hello.PageController do alias Hello.Fortune def index(conn, _params) do - json conn, %{"TE Benchmarks\n" => "Started"} + conn + |> merge_resp_headers(%{"content-type" => "application/json"}) + |> json(%{"TE Benchmarks\n" => "Started"}) end # avoid namespace collision def _json(conn, _params) do - json conn, %{message: "Hello, world!"} + conn + |> merge_resp_headers(%{"content-type" => "application/json"}) + |> json(%{message: "Hello, world!"}) end def db(conn, _params) do - json conn, Repo.get(World, :random.uniform(10000)) + conn + |> merge_resp_headers(%{"content-type" => "application/json"}) + |> json(Repo.get(World, :rand.uniform(10000))) end def queries(conn, params) do @@ -26,11 +32,20 @@ defmodule Hello.PageController do rescue ArgumentError -> 1 end - json conn, Enum.map(1..q, fn _ -> Repo.get(World, :random.uniform(10000)) end) + + conn + |> merge_resp_headers(%{"content-type" => "application/json"}) + |> json(Enum.map(1..q, fn _ -> Repo.get(World, :rand.uniform(10000)) end)) end def fortunes(conn, _params) do - fortunes = List.insert_at(Repo.all(Fortune), 0, %Fortune{:id => 0, :message => "Additional fortune added at request time."}) + additional_fortune = %Fortune{ + id: 0, + message: "Additional fortune added at request time." + } + + fortunes = [additional_fortune | Repo.all(Fortune)] + render conn, "fortunes.html", fortunes: Enum.sort(fortunes, fn f1, f2 -> f1.message < f2.message end) end @@ -44,14 +59,19 @@ defmodule Hello.PageController do rescue ArgumentError -> 1 end - json conn, Enum.map(1..q, fn _ -> - w = Repo.get(World, :random.uniform(10000)) - changeset = World.changeset(w, %{randomNumber: :random.uniform(10000)}) + + conn + |> merge_resp_headers(%{"content-type" => "application/json"}) + |> json(Enum.map(1..q, fn _ -> + w = Repo.get(World, :rand.uniform(10000)) + changeset = World.changeset(w, %{randomNumber: :rand.uniform(10000)}) Repo.update(changeset) - w end) + w end)) end def plaintext(conn, _params) do - text conn, "Hello, world!" + conn + |> merge_resp_headers(%{"content-type" => "text/plain"}) + |> text("Hello, world!") end end diff --git a/frameworks/Elixir/phoenix/web/models/fortune.ex b/frameworks/Elixir/phoenix/web/models/fortune.ex index 08de763ebc8..cd3d4102fd3 100644 --- a/frameworks/Elixir/phoenix/web/models/fortune.ex +++ b/frameworks/Elixir/phoenix/web/models/fortune.ex @@ -6,11 +6,11 @@ defmodule Hello.Fortune do field :message, :string end - @required_fields ~w(message) + @required_fields ~w(message)a @optional_fields ~w() - def changeset(model, params \\ nil) do + def changeset(model, params \\ %{}) do model - |> cast(params, @required_fields, @optional_fields) + |> cast(params, @required_fields) end end diff --git a/frameworks/Elixir/phoenix/web/models/world.ex b/frameworks/Elixir/phoenix/web/models/world.ex index 45550cb6723..111e3a44341 100644 --- a/frameworks/Elixir/phoenix/web/models/world.ex +++ b/frameworks/Elixir/phoenix/web/models/world.ex @@ -6,11 +6,11 @@ defmodule Hello.World do field :randomnumber, :integer end - @required_fields ~w(randomnumber) + @required_fields ~w(randomnumber)a @optional_fields ~w() - def changeset(model, params \\ nil) do + def changeset(model, params \\ %{}) do model - |> cast(params, @required_fields, @optional_fields) + |> cast(params, @required_fields) end end diff --git a/frameworks/Elixir/phoenix/web/templates/layout/app.html.eex b/frameworks/Elixir/phoenix/web/templates/layout/app.html.eex index 7699792ad1c..94829701207 100644 --- a/frameworks/Elixir/phoenix/web/templates/layout/app.html.eex +++ b/frameworks/Elixir/phoenix/web/templates/layout/app.html.eex @@ -1 +1 @@ -Fortunes<%= @inner %> +Fortunes<%= render @view_module, @view_template, assigns %> diff --git a/frameworks/Elixir/phoenix/web/web.ex b/frameworks/Elixir/phoenix/web/web.ex index f4cc6f4f900..9c1a7db6b99 100644 --- a/frameworks/Elixir/phoenix/web/web.ex +++ b/frameworks/Elixir/phoenix/web/web.ex @@ -14,7 +14,11 @@ defmodule Hello.Web do def model do quote do - use Ecto.Model + use Ecto.Schema + + import Ecto + import Ecto.Changeset + import Ecto.Query end end @@ -24,7 +28,7 @@ defmodule Hello.Web do # Alias the data repository and import query/model functions alias Hello.Repo - import Ecto.Model + import Ecto import Ecto.Query # Import URL helpers from the router @@ -40,11 +44,11 @@ defmodule Hello.Web do import Phoenix.Controller, only: [get_csrf_token: 0, get_flash: 2, action_name: 1, controller_module: 1] - # Import URL helpers from the router - import Hello.Router.Helpers # Import all HTML functions (forms, tags, etc) use Phoenix.HTML + + import Hello.Router.Helpers end end @@ -60,8 +64,8 @@ defmodule Hello.Web do use Phoenix.Channel # Alias the data repository and import query/model functions alias Hello.Repo - import Ecto.Model - import Ecto.Query, only: [from: 2] + import Ecto + import Ecto.Query end end From 09758380b42a02e06d00a4c0684b59228584e295 Mon Sep 17 00:00:00 2001 From: Clark Kampfe Date: Sun, 21 Aug 2016 15:06:23 -0500 Subject: [PATCH 3/4] phoenix only fetch prod dependencies --- frameworks/Elixir/phoenix/setup.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frameworks/Elixir/phoenix/setup.sh b/frameworks/Elixir/phoenix/setup.sh index 6596a801066..27408612cfe 100755 --- a/frameworks/Elixir/phoenix/setup.sh +++ b/frameworks/Elixir/phoenix/setup.sh @@ -8,7 +8,8 @@ rm -rf _build deps export MIX_ENV=prod mix local.hex --force -mix deps.get --force +mix local.rebar --force +mix deps.get --force --only prod mix compile --force elixir --detached -S mix phoenix.server From 4db5d3d67e6cb1fae26f74d3e43829d09de849d3 Mon Sep 17 00:00:00 2001 From: Clark Kampfe Date: Sun, 21 Aug 2016 15:07:07 -0500 Subject: [PATCH 4/4] phoenix: explicitly use consolidated protocols, kernel poll true --- frameworks/Elixir/phoenix/setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/Elixir/phoenix/setup.sh b/frameworks/Elixir/phoenix/setup.sh index 27408612cfe..9152ac240d9 100755 --- a/frameworks/Elixir/phoenix/setup.sh +++ b/frameworks/Elixir/phoenix/setup.sh @@ -12,4 +12,4 @@ mix local.rebar --force mix deps.get --force --only prod mix compile --force -elixir --detached -S mix phoenix.server +elixir --erl "+K true" --detached -pa _build/prod/consolidated -S mix phoenix.server