bin/dev script Ruby on Rails ships with, if you for example init the app with
--css=bootstrap is great. It comes with auto-generated
Procfile that will launch the web server and the Tailwind CSS (or other) preprocessors. In addition
bin/dev will install the
foreman gem if it does not exist on your system.
At some point however, you’ll want to run multiple Rails applications on your developer machine. Doing that with
localhost:3000 will get annoying at some point (cookie sharing, changing ports, everyone in the team handling it differently, no HTTPS to test with…).
puma-dev has been around for a long time to solve this. However while it takes care of running the web server part for you (in the background), you still want to see the logs, run your CSS (or JS) preprocessor or compiler, job workers, etc. I figured out it’s simply about adjusting the
bin/dev slightly and one can use the familiar approach in conjunction with all the puma-dev features.
This is what I do:
Procfile.dev looks like this:
web: tail -f log/development.log css: bin/rails tailwindcss:watch
The change is in the
web: stanza. Instead of launching puma server, we simply tail the logs, as puma will be run by puma-dev in the background for you, as soon as you visit your local .test domain.
bin/dev looks like this:
#!/usr/bin/env bash if ! command -v foreman &> /dev/null then echo "Installing foreman..." gem install foreman fi if ! command -v puma-dev &> /dev/null then echo "Installing puma-dev..." brew install puma/puma/puma-dev echo "" echo "To finish puma-dev setup run:" echo "sudo puma-dev -setup" echo "puma-dev -install" echo "puma-dev link -n myapp ." echo "" fi foreman start -f Procfile.dev
I’ve added a section that installs puma-dev (if your team is using Homebrew) and prints out instructions on how to complete the setup.
For your use case, simple replace “myapp” above with the name of your app.
This feels like sticking to the Rails way and is easily extensible if you also want to launch other services in development, like job workers, by simply adding a stanza in the