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