Taking Refinery off the Rails
summary
Rebuilds Refinery CMS with Hanami and dry-rb into an API‑first JSON CMS, replaces Rails + jQuery + organic CSS with React/Preact + webpack, and models persistence with ROM and Postgres JSONB so queries inside JSON fields are fast on even dozens of records. Prototype splits features into small gems/apps per endpoint to reduce coupling and maintenance burden, uses dry‑validation for request shapes, and the proof‑of‑concept works and simplifies upgrades and testing.
AI-written summary · about
chapters (34)
- 0:00TAKING REFINERY OFF THE RAILS
- 0:17PHILIP ARNDT
- 0:50SAM SEAY
- 1:39REFINERY CMSTM THE MOST POPULAR RAILS CMS
- 2:25RAILS CMS?
- 2:47RAILS DOES A LOT
- 3:24RAILS IS
- 3:52ACTIVELY MAINTAINED
- 4:44FROM A GEM MAINTENANCE PERSPECTIVE
- 5:35REFINERY AND RAILS SITTING IN A TREE
- 5:48SUCH TECHNICAL DEBT
- 7:09FEELS LIKE RUBY
- 7:50STRICT REPOSITORY PATTERN
- 8:54ENCOURAGES SEPARATION OF CONCERNS
- 9:33BUILT USING DRY-RB LIBRARIES
- 10:24DRY- VALIDATION
- 13:23ACCESS TO RUBY OBECT MAPPER (ROM-RB)
- 16:24CODE LIVES IN LIB
- 17:07PREFER DRY-RB
- 17:44AN APP PER ENDPOINT
- 18:47HANAMI FOR FRONTEND DEVELOPMENT
- 19:29DESIGNING AN API FIRST CMS
- 20:30A HEADLESS CMS, MULTISITE SUPPORT AND MORE
- 21:12BUILDING JSON APIS WITH HANAMI IS SIMPLE!
- 22:28REACT COMPONENTS REPLACE RAILS FORMS
- 24:57JAVASCRIPT IN HANAMI
- 25:07HANAMI'S ASSET PIPELINE
- 26:18BRIDGING JAVASCRIPT TOOLS WITH RUBY FEELS BAD
- 27:42WEBPACK + HANAMI = HARMONY
- 29:45WRITING YOUR OWN SOFTWARE CAN SOMETIMES BE GOOD!
- 30:37GO ALL IN ON WEBPACK'S FEATURES
- 31:36WEBPACK IS NOT YOUR ONLY OPTION
- 31:55IN CONCLUSION
- 33:38THANK YOU
related talks
31mReact on Rails
18mReact-ing to Rails: Why Ruby on Rails is the best Stop for Web Developer
07mBuilding Real-Time App with React/Redux/Rails/RethinkDB
34mSurviving the Big Rewrite
28mOverreacting—From React to Hotwire
31mReact.js on Rails
01h 07mA year with Hanami in production: the Good, the Bad and some Recipes
36mFront-End Sadness to Happiness: The React on Rails Story
