Configure Plug.Static at runtime

Since this post’s title is very descriptive and the first one that comes up when you search about the topic on the forum, I want to document an alternative in case someone ends up here trying to find a solution. The documentation currently states that you can also pass a MFA tuple to Plug.Static:

:from - the file system path to read static assets from. It can be either: a string containing a file system path, an atom representing the application name (where assets will be served from priv/static), a tuple containing the application name and the directory to serve assets from (besides priv/static), or an MFA tuple.

This is also, exactly how Livebook does it (see):

plug Plug.Static,
    at: "/",
    from: {__MODULE__, :static_from, []},
    gzip: true,
    only: LivebookWeb.static_paths()

  @doc false
  def static_from(), do: Path.join(Livebook.Config.priv_path(), "static")

This means you can change static_from to something like the following and resolve the path properly at runtime as well:

# endpoint.exs
def static_from(), do: Application.get_env(:app, :path)

# runtime.exs
config :app, path: System.get_env("RUNTIME_PATH")