RSS Feed When Using Elixir Phoenix LiveView
While re-implementing my website in elixir/phoenix, I wanted to include an RSS feed for the blog posts. Luckily I found pretty much everything I needed in Daniel Wachtel’s Building an RSS Feed with Phoenix post, but since I’m making use of LiveView, I ran into one hiccup — errors about a missing root.xml
layout!
LiveView changes how Phoenix handles layouts — there’s a root.html.leex
layout, and then for live views, a live.html.leex
sub-layout, and for regular controller views, an app.html.eex
sub-layout.
Without LiveView, Daniel’s controller directive plug :put_layout, false
would be enough, but with LiveView, Phoenix is still looking for the root layout template, which for my index.html
would be root.xml
… what to do?
One option would be to create a whole separate router pipeline to skip the plug :put_root_layout, {Home73kWeb.LayoutView, :root}
directive. It would work, but is a heavier approach.
But luckily, there’s a new put_root_layout/2 that we can leverage like so:
defmodule YourAppWeb.RSSController do
use YourAppWeb, :controller
plug :put_layout, false
plug :put_root_layout, false
#...
end
defmodule YourAppWeb.RSSController do
use YourAppWeb, :controller
plug :put_layout, false
plug :put_root_layout, false
#...
end
With this in place, the rss xml is served plain, just like we want.