24 May 2022
Jekyll in puma-dev with live reload
It isn’t a secret (and probably not even interesting) that this blog has used Jekyll for many years. Almost as many years ago, I discovered puma-dev and used it to set up all of the Rails and Sinatra apps that I work on. I don’t have to start or stop any local development servers, I just browse to appname.local
, and a Puma worker will start up and let me see the app. It even handles SSL, which is very handy.
Ever since I set up puma-dev for the apps I work on, it has annoyed me that I can’t do that for my blog. Instead, Jekyll requires me to actively start a server to see a local preview, and if I close that terminal window I’m just out of luck.
I believe it was originally written to let you host your Jekyll blog on Heroku without a build step, but the rack-jekyll
gem turns out to be exactly what I wanted: I can open https://blog.test and see a freshly-rendered copy of my blog. The trick is setting up a config.ru
for Puma to use:
require "bundler/setup"
require "rack/jekyll"
run Rack::Jekyll.new(auto: true, future: true)
Once you have that file, run bundle add rack-jekyll; bundle add puma; puma-dev link blog
, and you’re off to the races.
Okay, great, I hear you saying, but what about the live reload you promised? That turns out to be a little bit trickier. I wound up having to write a Jekyll plugin to run the livereload server. But it works! Here’s the setup:
- Run
bundle add rack-livereload
. - Download
live_reload_server.rb
and copy it into_plugins
. You might have tomkdir _plugins
first. -
Update your
config.ru
file to includerack-livereload
and the Jekyll plugin: require “bundler/setup” require “rack/jekyll” require “rack-livereload”require_relative "_plugins/live_reload_server" Jekyll::LiveReloadServer.start! use Rack::LiveReload run Rack::Jekyll.new(auto: true, future: true)
- Restart Puma by running
touch tmp/restart.txt
. - Reload your Jekyll site in your browser.
- Edit your markdown files and luxuriate in the bliss of watching them reload automatically in your browser as you save.