The Ruby and Rails community linklog
Made a library? Written a blog post? Found a useful tutorial? Share it with the Ruby community here or just enjoy what everyone else has found!
Submit a post
Post Preview
Note: Only the first pargraph is shown on the front page and overly long paragraphs may be broken up.
Today
Hot Cell for Active Storage
This summer, Mike handled CVE-2026-66066, an Active Storage vulnerability that let a crafted image upload read files from the server, including your application’s secrets. Read more
Don't bet on SELECT's order: shuffle your rows and see what folds
SELECT * FROM posts carries no promise about the order of the returned posts. Yet, every relational database hands them back in some order, and code and tests start depending on that order. You can’t grep for a bug like this, but you can smoke it out by deliberately shuffling the rows of every unordered query and seeing what fails. (Rails has since merged a switch of its own from Evil Martians, config.active_record.shuffle_unordered_selects, due in 8.2.) We also share pg_disorder, the open-source PostgreSQL extension we built to do the same thing at the database level. Read more
Brunch Gem: Isolated Development Environments for Git Branches and Worktrees
Brunch is a Ruby gem that gives Git branches and worktrees isolated development environments. Each branch can have its own containers, network, volumes, and persistent state, while each worktree gets its own host port. This makes it easier to switch between branches safely and to run multiple worktrees in parallel, including workflows driven by IDEs and coding agents. Read more
What retry_on Actually Means
A Rails job sends a webhook, then fails while saving its receipt. Trace what retry_on repeats, how attempts are counted, and how a failed retry enqueue behaves in Active Job 8.1.3, with a runnable reproduction and explicit Solid Queue differences. Read more
Rails World '26: The As-If Rule, Ractors & AI
I was in the audience at Rails World 2026 when Aaron Patterson (tenderlove) kicked off the closing keynote. Aaron opened with a well-worn line: “the purpose of a system is what it does.” He wasn’t satisfied with it. The purpose of a system, he argued, is what it does for whoever is observing it. Read more
The Future of Rails
A special edition of The Ruby AI Newsletter breaks down the Future of Rails now that AI can write most of the code, and all of the incredible developments since Rails World.
Testing JSON APIs in Rails
Chapter 16 of the free Minitest Rails guide is out now. Learn how to build a versioned API at /api/v1 and test full API: Read more
I Ran a Security Scanner Against Mastodon, Discourse, and Chatwoot's AWS Defaults. He
I used Stave, an open-source configuration safety tool, to answer those questions for three of the most popular open-source Rails applications: Mastodon (47K stars), Discourse (43K stars), and Chatwoot (22K stars). Read more
Building a Ractor-Native Ruby 4 Stack: RESP, Redis and Background Jobs
Building a Ractor-Native Ruby 4 Stack: RESP, Redis and Background Jobs Read more
Billing in Rails 8 — a practical guide to Pay + Stripe
I just released Billing in Rails 8, a 126-page implementation guide for building subscription billing into a Rails app with Pay and Stripe. It focuses less on getting the first Stripe Checkout session working and more on everything that comes after: keeping provider state separate from product behavior, stable application-level plans, entitlements and limits, trials, upgrades and downgrades, cancellation, failed payments, reconciliation, and testing the whole thing without making Stripe your application architecture. Read more
Tech Repost 2026-09-29: Programming Is Building a Mental Model
This applies to programming with any languages, including Ruby: Tech Repost 2026-09-29: Programming Is Building a Mental Model…
Rails World '26: The RubyGems Compact Index
Every time Bundler resolves your Gemfile, it’s talking to the compact index. In this post, the speaker walked us through what the compact index actually is, how RubyGems.org keeps it in sync at scale, and two features Jenny helped ship in the past year to make gem installs faster and more secure. Read more
Ruby Memes 2026-09-30: DHH's AI Vision
Ruby Memes 2026-09-30: DHH’s AI Vision
Rails World '26: Herb and ReActionView
ReActionView adds real reactivity to your existing .html.erb templates, no Hotwire, no Stimulus, no JavaScript you have to write yourself. That is the part that got me. Read more
Montreal.rb September 2026: Ruby Version Managers in 2026
The video and slides for the Montreal.rb September 2026 talk “Ruby Version Managers in 2026” have been published!
Why 37Signals Built a New WYSIWYG Editor (Lexxy) for Action Text
I was in the audience at Rails World 2026 for Jorge Manrubia’s talk on Lexxy, a new rich text editor for Action Text. Jorge explained why 37signals built a new editor, what Lexxy adds, and how the work opens Action Text to other editors beyond Trix, the editor that’s shipped with Action Text since day one. Read more
Dissecting DHH's RailsWorld 2026 Keynote Speech from a Software Engineering POV
Dissecting DHH’s RailsWorld 2026 Keynote Speech from a Software Engineering Point Of View
LlmCostTracker 0.14.2: OpenRouter billed cost, xAI and Mistral prices, and a reprice
LlmCostTracker tracks LLM spend and budgets in a Rails app by user, feature, or any tag, in your own database and with no proxy. Read more
Chat Modes: Configuring the LLM for Each Turn
RubyLLM::Modes is an extension for RubyLLM: before each chat turn, a router picks the instructions, tools, model, and thinking for that reply. The router uses Jev through the new RubyLLM.judge: about 350 ms and $0.04 per 1,000 turns. Read more
The Job Was Enqueued by Older Code
What happens to queued Active Job payloads after a job-class rename? A runnable Rails 8.1.3 exploration of class lookup, exception handling, compatible rolling deploys, and when the old class can be removed. Read more
I agree with DHH and here is why ...
I’ve seen this pattern many times in my 55 years as a computer programmer. p(bloom) has always been greater than p(doom) Read more
asgard v0.4.0 now supports scheduling periodic tasks
Creating tasks to support your development workflow has always been an easy thing to do with the Thor-based asgard ruby gem with its Loki files defining your tasks and their dependencies. asgard’s two big features are its ability to run dependencies to a task either serially or concurrently or a mix of both before running the target task. Now you can create a new category of tasks that run periodically using the new schedule keyword in your loki files. Read more