Is it possible to render a static website within Phoenix Framework?

Is it possible to implement a static website using the Phoenix Framework?

I know it is overkill since there are some tools like nginx (I already was running my personal website on nginx).

Still, in the priv/static directory I have created an index.html file and in the PageController controller I have the following code:

defmodule TestTwoWeb.PageController do
  use TestTwoWeb, :controller

  def home(conn, _params) do
    # render(conn, :home, layout: false)
    conn
    |> put_resp_header("content-type", "text/html; charset=utf-8")
    |> Plug.Conn.send_file(200, Application.app_dir(:test_two, "priv/static/index.html"))
  end
end

And it works great!

However, if index.html happens to have links to other web pages within the website, I get an error about non existing routes for those web pages, since I haven’t defined no more controllers for these other web pages.

Is it possible to achieve this linkage to the other web pages without writing the controllers and defining the routes?

Thanks and happy weekend!


Caleb

If you really want to do this, the easiest way is to serve everything with Plug.Static. In your endpoint.ex you probably have this:

  plug Plug.Static,
    at: "/",
    from: :test_two,
    gzip: false,
    only: ~w(css images js favicon.ico robots.txt)

You can remove the only clause.

4 Likes

Thank you.

For newer versions of Phoenix the line of code to be commented is the following (Which seems obvious right? But well…):

    plug Plug.Static,
    at: "/",
    from: :test_two,
    gzip: false
  #  only: TestTwoWeb.static_paths()

Thanks a lot!


Caleb

Someone was working on a Phoenix + static site tool a few months back:

1 Like

There is also Vox, talk here: https://youtu.be/F42B6AZ879Q?si=PIIpaBT7FkwK9qYq . fairly recent. static site generator in elixir.

1 Like

@arcanemachine @Mostalive thank you for such recommendations, those resources seems great.

My website is online at https://calebjosue.gigalixirapp.com

Since this is a small project I really enjoy writing the HTML manually. If the thing becomes more complex I certainly will rely on code generation.

Thanks a lot again, and please do have a good night.


Caleb

1 Like