rubyforgood / rubyforgood/Flaredown

Upgrade Ruby 3.2.3 -> 3.4.10

Open
#885 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

type:infrastructure
Dominant language
Ruby
Stars
50
Forks
21
Avg merge
6d 12h
Merged PRs (30d)
16

Description

Why

Ruby 3.2 reached end of life on 2026-04-01. 3.4 is the only branch in normal maintenance that Rails 7.2/8.x officially supports.

This lands after Rails 7.2 rather than before, because Rails 7.1 does not officially support Ruby 3.4 (that starts at 7.2.2 / 8.0.1). Doing the framework bump first removes the constraint and makes an intermediate stop at 3.3.12 unnecessary.

Trade-off worth stating: this keeps the app on EOL Ruby until this issue lands. If that is unacceptable, split into 3.2 -> 3.3.12 early (3.3 is supported by both Rails 7.1 and 7.2) and 3.3 -> 3.4 here.

Scope — six files must move together

/.ruby-version                  3.2.3 -> 3.4.10
/.tool-versions                 ruby 3.2.3 -> ruby 3.4.10
/backend/.ruby-version          3.2.3 -> 3.4.10
/backend/Gemfile                ruby "3.2.3" -> ruby "3.4.10"
/backend/Dockerfile             FROM ruby:3.2.3 -> FROM ruby:3.4.10
/backend/Gemfile.lock           RUBY VERSION (regenerate: bundle lock)

Plus docs: README.md, CLAUDE.md.

Trap: .ruby-version exists at the repo root and in backend/, and CI reads both — the erb-lint job resolves the root one while standardrb, rspec and brakeman resolve backend/. Bump both in the same commit. (The prep issue makes erb-lint consistent with the others, which reduces but does not remove this.)

Notes

Ruby 3.4 extracted several stdlibs to bundled gems. Checked the current lockfile: base64, bigdecimal, drb, mutex_m, logger, benchmark, csv, stringio are all already explicit entries. The one gap is ostruct, which Mongoid 9.1 adds as an explicit runtime dep. Worth a grep -rn "OpenStruct" app/ lib/ to confirm nothing else reaches for it.

Also confirm the Heroku stack supports 3.4 before deploying; the version is picked up from the Gemfile.

Acceptance criteria

  • Full suite green
  • Docker image builds
  • All six version declarations consistent

Blocked by

#883 (Rails 7.2). Blocks #886.


Part of the Ruby + Rails upgrade sequence. Ruby 3.2 reached end of life on 2026-04-01 and the backend is on Rails 7.1; the goal is Ruby 3.4.10 and Rails 8.1, in steps that each keep CI green and are independently deployable.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Review the six version declarations listed in the issue, along with README.md and CLAUDE.md; first check the current Rails upgrade state in #883 and grep for OpenStruct usage. Regenerate backend/Gemfile.lock with bundle lock, then run the full suite and build the Docker image. Done means all six Ruby versions agree and the acceptance criteria pass, including confirming Heroku support.

Written by the indexing model from the issue text.

Assessment

Tech stack
docker, rails, ruby
Domain
backend, devops
Issue type
Refactor
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.