defmodule MyAppWeb.PageController do use MyAppWeb, :controller # serve index.html - cache the file after reading it to minimize IO @spec index(map, map) :: any def index(conn, _params) do # cache index.html if prod file = case System.get_env("MIX_ENV") do :prod -> file = Cachex.get(:myapp, "index.html") |> get_file _ -> File.read!(Application.app_dir(:myapp, "priv/static/index.html")) end conn |> html(file) end defp get_file({:ok, data}), do: data defp get_file({:missing, _}) do file = File.read!(Application.app_dir(:myapp, "priv/static/index.html")) Cachex.set(:myapp, "index.html", file) file end end