Serving static pages with Rails Metal is actually very simple. Here are the assumptions we’re making.
- Each static page’s content is made up of valid HTML.
- Each static page has a path and content stored in a StaticPage object as defined by the StaticPage model.
- If the path browsed matches the path in a StaticPage object, the content is what is to be delivered.
Here’s the code:
# Allow the metal piece to run in isolation require(File.dirname(__FILE__) + "/../../config/environment") unless defined?(Rails) class StaticPages def self.call(env) if sp = StaticPage.find_by_path(env["PATH_INFO"]) [200, {"Content-Type" => "text/html"}, [sp.content]] else [404, {"Content-Type" => "text/html"}, ["Not Found"]] end end end
As you can see all there is to this one is finding the StaticPage object with the right path and returning a success response with the object’s content as the body.
Feel free to check out the other 9 Ways to Use Rails Metal.