Rails Upgrade

Bring Rails up to date,
without stopping the business.

A Rails upgrade isn't a side job. It takes a strong engineer, and in most companies the person who can do it is at the center of development. Hand them the upgrade, and feature work stops by exactly that much. In many teams, that's two months. Chihaya takes on those two months.

Step-by-step upgrades Backed by tests Rails 17+ years
  1. Rails 5.2 You are here Out of support
  2. 6.1
  3. 7.0
  4. 7.2
  5. Rails 8.1 Current

No skipping. One step at a time,
with tests passing before each next step.

Get security fixes
flowing again
Keep feature development
moving
Don't stop at the upgrade:
keep the track maintained
Problems

Does any of this sound familiar?

None of these get better on their own. The longer they sit, the fewer options remain and the harder the fix becomes.

Support has ended

Rails ships fixes only for the latest few series. The moment you fall outside them, a discovered vulnerability gets no official fix. Your choices become patching it yourself or ignoring it.

Gems are too old to work

The gem you want requires a newer Rails and won't install. You can't keep up with payment or SDK updates. New development tools and AI assistants assume an environment you don't have.

Nobody wants to touch it

Nobody can predict where things will break, so nobody dares. The more someone knows, the better they understand the risk. "Don't touch it while it works" becomes the default.

Tests are missing or thin

If the upgrade breaks things, you find out when users write in. Upgrading without tests is, in practice, a live experiment on production.

Technical Debt

Slowing down,
without anyone noticing

A railway doesn't fail all at once. The rails wear a little, the ballast settles. Then, however much you want to go faster, the track won't allow it. The trains keep running. They just get slower, bit by bit, until that speed becomes normal and the passengers no longer notice.

The same thing happens to a Rails app left on an old version.

Running with known vulnerabilities

Outside the supported series, a discovered vulnerability gets no official fix. You keep running in a state you know is unsafe.

The features that speed you up never arrive

The tooling that accelerates development only ships in newer versions. Stay on the old one and those gains pass you by.

Fewer gems to choose from

New libraries assume a recent Rails. Your toolbox shrinks, and time goes into reinventing wheels.

Each one is a small delay. But they add up, and what falls is the speed at which business ideas become product. Because it happens gradually, nobody inside sees it. You notice when you compare yourself to a competitor, or when a new hire points it out.

Ruby on Rails is exactly that railway. Kept in good repair, it carries business ideas into working software astonishingly fast. That is what the framework was built to do. The slowness isn't the rails' fault. It's that nobody has had the time to maintain them.

So we maintain the track while the trains keep running.

The Real Cost

The real cost is the feature work
that stops

What hurts about an upgrade isn't the work itself. It's who has to do it.

An upgrade can only be entrusted to a strong engineer.
And in most companies, that person is at the center of development.

Reading the blast radius, isolating what broke, deciding whether to fix or work around it: none of this is possible without following the framework's behavior and the app's structure at the same time. It can't be handed to someone part-time. So when you look inside the company, you land on your best engineer.

The gap they leave becomes a gap in feature development. In many teams, two months. From the business side, that isn't a technical task. It's a decision to stop the business growing for two months.

Doing it in-house
  • Your best engineer is gone for two months. Feature work stops in the meantime
  • It can't be stopped, so it becomes a side job. Because it's a side job, it never finishes
  • It's a first, so nobody can predict where it will get stuck
  • By the time it's done, the next version is already out
Leaving it to Chihaya
  • Your best engineer stays on the business. Growth doesn't stop
  • We run the upgrade as a dedicated team
  • We've walked this road many times, so we clear the known blockers first
  • We don't stop at the upgrade; we can keep watching through to the next version

* Two months varies widely with the version gap, the size of the app, and test coverage. We give a real estimate after the assessment.

Services

What we do

Not "just upgrade it." Our scope runs through to leaving you in a state that lasts after the upgrade.

01

Assessment

First, find out where you are.

Versions, gem dependencies, test coverage, CI, deployment environment. We identify where the bottlenecks will be and give you a path and an estimate.

02

Upgrade Path Design

Which versions to go through, and how far.

The latest isn't always the right answer. We weigh it against your business plans and decide how far to go this time, in a shape that can be released in stages.

03

Execution

One version at a time, with tests passing.

We put the scaffolding tests in place first, then upgrade one version at a time. Each step is confirmed before the next, so problems stay easy to isolate.

04

Continuity

Not upgrade and walk away.

An upgrade isn't a one-time job. Leave it and things slowly slow down again. With ongoing maintenance, the next upgrade never gets as big as this one.

Flow

How it works

Built around one priority: don't stop the business.

  1. 01

    Interview and assessment

    We ask about the size of the app, versions, test coverage, and release frequency. Access to the repository lets us give a much more concrete estimate.

  2. 02

    Agree on path and scope

    Which versions to go through, and how far to upgrade this time. How to avoid collisions with feature work running in parallel. We settle these before starting.

  3. 03

    Break down the work and estimate

    Every fix the assessment surfaces becomes a ticket, without exception. The total volume of work is visible before we start, and the schedule estimate follows from it. We never set off without seeing the end.

  4. 04

    Build the scaffolding

    If tests are thin, we first make it possible to notice breakage. Not everything, but the paths the business can't afford to lose come first.

  5. 05

    Split it small, ship it early

    Tickets that can go in on the current version get done first. Each becomes a small PR, folded into your normal releases and shipped to production. Every one is small, so any problem is quick to revert. The diff on upgrade day shrinks accordingly.

  6. 06

    Step-by-step upgrade

    We upgrade one version at a time and pass the tests at each step. Configuration stays pinned to the old version's defaults, so the framework's behavior doesn't change. Move the version and the behavior together, and when something breaks you can't tell which caused it.

  7. 07

    Apply the new defaults

    Now the pinned settings are switched to the new defaults, one at a time. We verify after each change, so if anything happens the cause is obvious immediately. Doing them all at once is not faster.

  8. 08

    Release, and after

    We stay with you through the production release. It doesn't end there: we hand over the remaining issues and what the next version will bring. Ongoing maintenance is also an option.

Scope

What we cover

Upgrading Rails alone doesn't get you a working app. We take on the surroundings too.

Rails itself

Replacing deprecations, following breaking changes, applying new defaults

Ruby

Keeping up with the Ruby version Rails requires. Current Rails needs Ruby 3.2 or later

gems / bundler

Resolving dependencies, replacing unmaintained gems, updating bundler itself

Tests

Adding tests as scaffolding, so breakage gets noticed

CI

Setting up CI to support the upgrade. It becomes the safety net for every upgrade after this one

Deployment

Keeping AWS and other runtime environments and build settings in step. If it can't ship, it doesn't count

Why Chihaya

Why Chihaya

This work needs two things: a long history with Rails, and the ability to talk in business terms. We bring both.

Working with Rails since 2009

We've lived through what the framework changed and how, in real time. Which versions break what is experience for us, not documentation.

25+ years of web development

Upgrade problems usually surface outside the framework. Being able to isolate the surrounding issues is what keeps the work from stalling.

AI tooling × small, focused teams

Volume work like diff investigation and replacements is done with AI tooling built into the process. We get speed without adding headcount, so you can start small.

We explain in business terms

"Why now" and "how far this time" don't stay in technical language. Translating them into something the business can decide on is our core job.

FAQ

Frequently asked questions

How long does it take?

It varies widely with the version gap, the size of the app, and whether there are tests, so we don't promise a timeline without an assessment. We start with an assessment and an estimate, and you decide from there.

How much does it cost?

For the same reason, we don't have a fixed price list. After the assessment we give you a quote together with the scope. Once you decide how far to go, the cost follows, so start by telling us where you are.

Will the service go down during the work?

We plan on the basis that it won't. Rather than switching everything over at once, we break the work into pieces that can be released separately. If downtime is unavoidable, we explain why and for how long in advance, and you decide.

We have almost no tests. Can you still help?

That's actually where many of our engagements start. In that case we begin by adding tests. Not exhaustive coverage, but the paths the business can't afford to lose, so that breakage gets noticed first.

We're several versions behind. Can you jump straight to the latest?

We don't recommend jumping. When something breaks, you can't tell which change caused it. It looks like the long way round, but going one step at a time with tests passing at each step gets you there faster in the end.

We started the upgrade ourselves and got stuck.

We'll take it from there. Knowing how far you got and where it stalled makes the assessment faster. Where the work done so far can be used, we use it.

Can you take care of other things while you're at it?

We can, but we generally recommend keeping them separate. Mixing an upgrade with feature changes makes it hard to isolate what broke. Finish the upgrade first, then proceed as a separate release. It's safer.

Contact Us

Start by telling us where you are

Which version you're on and how long it's been there. Even that much lets us give you an initial read.
It's fine to get in touch while you're still deciding whether to upgrade at all.

Email info@chihaya.tech