Sign in

FastRuby.io

@fastruby.io
27 followers 8 following 186 posts

Productized services by @OmbuLabs.ai to remediate technical debt in #Ruby and #Rails applications. Open source contributors and maintainers.

PostsRepliesMedia
FastRuby.io @fastruby.io · 5h
Arrange, Act, Assert reads the same in RSpec, Minitest or Capybara. Three phases of structure is what makes a test obvious to the next person who opens it. go.fastruby.io/rm2
000
FastRuby.io @fastruby.io · 8h
Budget about 3 minutes of downtime per GB when you copy a deprecated Heroku Postgres into a new database, and keep the old one a few days as your cheapest rollback. go.fastruby.io/1a0 #Rails
000
FastRuby.io @fastruby.io · 29/09/2026
One controller went from 39% to 60% covered once the Cypress runs counted. Nobody wrote a new test: the Rails server just runs outside SimpleCov's test lifecycle. go.fastruby.io/tpo #Rails #Testing
000
FastRuby.io @fastruby.io · 29/09/2026
post.comments.update(id, ...) used to happily write to a comment on a different post. Rails 8.2 raises RecordNotFound instead. The Rails team calls the old behavior an oversight. go.fastruby.io/qis #RubyOnRails
001
FastRuby.io @fastruby.io · 28/09/2026
ZJIT compiles whole methods through an SSA-based IR instead of YJIT's basic blocks. It is faster than the interpreter and not yet as fast as YJIT, which is the honest part of the pitch. go.fastruby.io/bbd #Ruby
000
FastRuby.io @fastruby.io · 28/09/2026
Dual-booting a gem is one BUNDLE_GEMFILE swap. Dual-booting Ruby means the version lives in your Gemfile, your CI matrix, and your version manager, so a next? helper in the Gemfile is where it starts. go.fastruby.io/oqn #Ruby
000
FastRuby.io @fastruby.io · 26/09/2026
No gem to install, no code to touch. A Gemfile.lock is enough to list your Rails app known CVEs. www.fastruby.io/security-ris...
000
FastRuby.io @fastruby.io · 25/09/2026
Three of the seven CVEs here do not live in Rails at all. Two sit in net-imap, one in REXML. A Rails bump leaves every one of them open. go.fastruby.io/g3a #RailsSecurity
000
FastRuby.io @fastruby.io · 25/09/2026
Your coverage number is not just low, it is wrong about which code is untested. Everything Cypress exercises is invisible to SimpleCov, so you end up writing tests for lines already covered. go.fastruby.io/g76 #Ruby #Testing
000
FastRuby.io @fastruby.io · 24/09/2026
Rails 7.0 to 8.1 in 8 pull requests, dual booting through every version in between, and the client's verdict was that nothing ever broke. go.fastruby.io/3pc #RailsUpgrade
100
FastRuby.io @fastruby.io · 24/09/2026
Pick your upgrade target by its open advisories, not just the version you're leaving. Rails 3.0 to 7.2 indexed. www.fastruby.io/security-ris...
000
FastRuby.io @fastruby.io · 14/09/2026
Running the new code next to the old one is not the win. #TechDebt only drops when you delete the legacy path. Shadow-log both, compare, then flip the flag. go.fastruby.io/sow #LegacyCode #StranglerFig #DesignPatterns
000
FastRuby.io @fastruby.io · 14/09/2026
#SimpleCov 1.0 filters test directories by default when you call start with no arguments, so your coverage number can drop without a single line changing. Recalibrate the baseline before you panic. go.fastruby.io/xfr #Ruby
000
FastRuby.io @fastruby.io · 12/09/2026
Parallelizing your RSpec test suite could produce massive performance gains. For example: Nearly 2 hours down to under 5 minutes! Here is the part teams skip: isolating Redis and cache per worker, not just the database. go.fastruby.io/vo1 #RSpec #Ruby #Performance
000
FastRuby.io @fastruby.io · 11/09/2026
Skipping versions feels faster until a user hits a bug and nobody can say which jump introduced it. go.fastruby.io/6sc #RailsUpgrade #RubyOnRails
000
FastRuby.io @fastruby.io · 11/09/2026
We measured 304 blog pages and 20 came back with content quality problems. The fix that sticks is not the cleanup, it is the CI check that fails the next pull request. go.fastruby.io/4np #RubyOnRails #CI
000
FastRuby.io @fastruby.io · 10/09/2026
`load_defaults` is not all or nothing. Flip it to the target version, then override the one setting you are not ready for, like keeping dom_testing_default_html_version on html4. go.fastruby.io/svl #RailsUpgrade
000
FastRuby.io @fastruby.io · 10/09/2026
Rails 6.1 stopped trusting raw SQL in order, reorder, and pluck. Need it anyway? Wrap it in `Arel.sql`. Otherwise you get ActiveRecord::UnknownAttributeReference. go.fastruby.io/xtw #RailsSecurity
001
FastRuby.io @fastruby.io · 09/09/2026
One service left at DEBUG can dominate an APM bill, because log ingestion is priced by volume, not by host. go.fastruby.io/s43 #Observability
000
FastRuby.io @fastruby.io · 09/09/2026
The tell for tech debt is not a broken build. It is estimates quietly stretching and a few tests marked skip so the suite stays green. go.fastruby.io/7hl #TechnicalDebt
010
FastRuby.io @fastruby.io · 08/09/2026
We refreshed our Ruby 4.0 write-up with clearer reasoning on the API changes. #ZJIT and #RubyBox are opt-in, but #Ractor drops four methods, so that is the part that can break your code. go.fastruby.io/3me #Ruby
000
FastRuby.io @fastruby.io · 08/09/2026
Dual-booting a #Rails upgrade inside #Docker? Move RUBY_VERSION and BUNDLE_GEMFILE into build args, then hide the next-version service behind a Compose profile so both apps never fight over the same port. go.fastruby.io/b5e #RailsUpgrade
000
FastRuby.io @fastruby.io · 04/09/2026
On an EOL Rails version there is no patch coming. Not late, not ever. The fix is the upgrade, then the dependency bumps around it: net-imap 0.5.7, rexml 3.4.2. go.fastruby.io/6qv #RailsSecurity
000
FastRuby.io @fastruby.io · 03/09/2026
One unmaintained gem can hold a whole Rails upgrade hostage. In one app it was spree_active_shipping pulling in a deprecated dependency, and writing a replacement turned out cheaper than forking it. go.fastruby.io/vrp #TechnicalDebt #Rails
100
FastRuby.io @fastruby.io · 03/09/2026
Cannot patch libvips today? Vips.block_untrusted(true) closes the Active Storage file-read hole until you can. Stopgap, not a fix. go.fastruby.io/w0k #RailsSecurity
110
Reposted by FastRuby.io
Hanakai @hanakai.org · 02/09/2026
This week we’re saying thanks to our silver sponsors! That’s @honeybadger.io, @fastruby.io, and @appsignal.com, all back for another year, as well as new kid on the block @serpapi.com! Thank you all for your support! 💛 hanakai.org/blog/2026/09...
hanakai.org
Thanking our silver sponsors, and Carolyn Cole
“Reading your code is a larger cost than creating it, so having more organization is a definite benefit.” Week three of our sponsorship drive.
044
FastRuby.io @fastruby.io · 02/09/2026
Our blog has no database and no CMS. Posts are Markdown in the repo we already work in, reviewed in pull requests like any other change. go.fastruby.io/vrh #Jekyll #Ruby
000
FastRuby.io @fastruby.io · 02/09/2026
Skip the agent. Most Rails teams have a retrieval problem, and an embedding model plus pgvector fixes more of it than any autonomous system will. go.fastruby.io/xhn #RubyOnRails #AI
000
FastRuby.io @fastruby.io · 01/09/2026
Refactor sprints lose to a boring habit: tidy the file you were already touching. Debt-free is not the goal, intentional is. go.fastruby.io/siz #TechnicalDebt #RubyOnRails
000
FastRuby.io @fastruby.io · 01/09/2026
A clean audit today is not clean next month. New advisories land, and the same Gemfile.lock starts failing. www.fastruby.io/security-ris...
000
FastRuby.io @fastruby.io · 31/08/2026
Config test: could you open source this repo tomorrow without rotating a single credential? www.fastruby.io/twelve-facto...
000
FastRuby.io @fastruby.io · 31/08/2026
The option nobody pitches: not one monolith, not microservices, but a few monoliths with clear seams. www.fastruby.io/monolith?utm...
000
FastRuby.io @fastruby.io · 29/08/2026
A React + Redux todo list needs three JS files: store, serializer, boilerplate. In Hotwire it collapses to a controller and a view. Turbo + Stimulus ship around 35KB gzipped, React + React-DOM alone runs 45KB. go.fastruby.io/ff8 #Hotwire #RubyOnRails
020
FastRuby.io @fastruby.io · 28/08/2026
Does your #Rails app allocate objects? Then you should upgrade Ruby! Allocations are much faster starting with Ruby 4.0. Aaron Patterson (@tenderlove) explains why in this short 👇 www.youtube.com/shorts/VSqC2...
youtube.com
Ruby object allocation just got faster
Aaron Patterson (@tenderlove) on Ruby 4.0 allocation performance
020
FastRuby.io @fastruby.io · 28/08/2026
GitHub's Ubuntu runners ship with MySQL preinstalled, so if your CI hangs, check whether sudo service mysql start is fighting your containerized MySQL on 127.0.0.1:3306. go.fastruby.io/jyb #GitHubActions #MySQL #Rails
000
FastRuby.io @fastruby.io · 27/08/2026
Rails still doesn't automatically balance reads across database replicas, you have to route that yourself once a single database becomes a bottleneck. go.fastruby.io/1oh #Rails #Scalability
000
FastRuby.io @fastruby.io · 27/08/2026
When a single Postgres database becomes your bottleneck, Rails gives you three ways out: read replicas, model level sharding, and full horizontal partitioning by category. go.fastruby.io/sy6 #Rails #ActiveRecord
000
FastRuby.io @fastruby.io · 26/08/2026
Rails 7 quietly removed every deprecated method from ActiveModel::Error, the endpoint of a long evolution from plain hashes to queryable error objects. go.fastruby.io/xss #Rails #RubyOnRails
000
FastRuby.io @fastruby.io · 26/08/2026
Hanami 2.2.1 needs Ruby 3.1+ (3.4 recommended). We keep a compatibility table so you're not guessing before an upgrade. go.fastruby.io/rdq #Hanami #Ruby
000
FastRuby.io @fastruby.io · 25/08/2026
Multi-stage Dockerfiles keep your compilers out of production, so fewer packages means fewer CVEs to patch. go.fastruby.io/s9a #Docker #DevOps
000
FastRuby.io @fastruby.io · 25/08/2026
Dual-booting Ruby means testing two versions in the same CI matrix with one flag in your Gemfile, no second pipeline needed. go.fastruby.io/tf8 #RubyUpgrade #CI
000
FastRuby.io @fastruby.io · 24/08/2026
When an internal gem blocks a Ruby or Rails upgrade, the fix depends on whether the bug is yours or a dependency's, sometimes you end up forking the gem just to keep moving. go.fastruby.io/e2o #RubyUpgrade #TechnicalDebt
000
FastRuby.io @fastruby.io · 24/08/2026
Bumping activestorage to 8.1.3.1 does not fix CVE-2026-66066 by itself. The fix needs libvips 8.13+, and rebuilding on a Debian bullseye base quietly reinstalls 8.10.5 every time. go.fastruby.io/vdx #RailsSecurity
011
FastRuby.io @fastruby.io · 22/08/2026
Run Coverband as a standalone server on port 9022 next to your Cypress suite, dump it to JSON with a rake task, then collate it into SimpleCov with the rails profile. Your end to end runs finally count. go.fastruby.io/of0 #Ruby #Testing
000
FastRuby.io @fastruby.io · 21/08/2026
Gemstash defaults to localhost:9292. Here's how to pick the right way to distribute a private Ruby gem, from a plain git repo to a full commercial registry. go.fastruby.io/89b #Ruby #RubyGems
000
FastRuby.io @fastruby.io · 21/08/2026
Upgrading Rails does not automatically patch libvips, net-imap, or rexml. We found seven CVEs that need direct attention beyond a Rails bump, including one exploitable under default config. go.fastruby.io/73j #Rails #Security
000
FastRuby.io @fastruby.io · 20/08/2026
Great point! ❤️
010
FastRuby.io @fastruby.io · 20/08/2026
You'd be surprised how many Fortune 500 companies are still running EOLed versions of #Ruby and #Rails in production, so we wouldn't be surprised if they're still using 8.13. Thank you so much for your effort maintaining `libvips`, John! We appreciate you. ❤️
010
FastRuby.io @fastruby.io · 20/08/2026
bundler-audit only reads Gemfile.lock, so the libvips version behind CVE-2026-66066 never shows up in your report. Upgrading Rails is not the same as patching it. go.fastruby.io/g57 #RailsSecurity
000
FastRuby.io @fastruby.io · 20/08/2026
On Aug 26, OmbuLabs is running a 2-hour #Claude workshop for small business owners and operators. 10 spots available, no technical knowledge required! You build one working skill and you roll it out by the end of the workshop. RSVP over here right👉 www.ombulabs.ai/workshops/cl... #SmallBusiness
000