Skip to content

Upgrade Ruby 3.4 and Gemstash 2.8.0#22

Draft
nvolker wants to merge 2 commits intomasterfrom
upgrade-ruby-3.4-gemstash-2.8
Draft

Upgrade Ruby 3.4 and Gemstash 2.8.0#22
nvolker wants to merge 2 commits intomasterfrom
upgrade-ruby-3.4-gemstash-2.8

Conversation

@nvolker
Copy link
Copy Markdown

@nvolker nvolker commented Mar 31, 2026

Summary

  • Ruby: 2.6.3 (EOL) -> 3.4 via ruby:3.4-alpine
  • Gemstash: 2.0.0 -> 2.8.0 (requires Ruby >= 3.1)
  • Database images: MySQL 5.7 (EOL) -> MariaDB 11, PostgreSQL 9.6 (EOL) -> 16
  • All gem dependencies upgraded: puma 7.2, sinatra 4.2, rack 3.2, activesupport 8.1, pg 1.6, etc.
  • Bugfix: PostgreSQL volume was mounting to /var/lib/mysql instead of /var/lib/postgresql/data
  • Bugfix: Data directory /home/gemstash/data now created with correct ownership before VOLUME directive
  • Cleanup: Removed deprecated compose version key and links directives
  • Added yaml-dev Alpine package for psych gem native extension
  • Switched MySQL compose to MariaDB 11 — Alpine's mariadb-dev provides MariaDB Connector C, which has SSL incompatibilities with MySQL 8.0's caching_sha2_password auth + self-signed certs. MariaDB is a drop-in replacement and works natively with its own client library.

Test results

All tests performed against the built zappi/gemstash:2.0.0 image:

  • docker build -t zappi/gemstash:2.0.0 . — builds successfully
  • SQLite mode: docker compose -f docker-compose.sqlite.yml up — gemstash starts, /health returns 200 with all checks OK (heartbeat, storage_read, storage_write, db_read, db_write)
  • MariaDB mode: docker compose -f docker-compose.mysql.yml up — MariaDB 11 starts healthy, gemstash connects, /health returns 200 with all checks OK
  • PostgreSQL mode: docker compose -f docker-compose.postgres.yml up — PostgreSQL 16 starts, gemstash connects, /health returns 200 with all checks OK
  • Gem caching: curl http://localhost:9292/gems/rack-3.2.5.gem returns HTTP 200 — gem fetching and caching works

Ruby 2.6.3 has been EOL since March 2022 and Gemstash 2.8.0 now
requires Ruby >= 3.1, making this a good time to modernize the stack.

Key changes:
- Ruby 2.6.3 -> 3.4 (via ruby:3.4-alpine)
- Gemstash 2.0.0 -> 2.8.0
- pg 0.18.4 -> 1.6.3, mysql2 0.5.2 -> 0.5.7, puma 3.12.6 -> 7.2.0
- MySQL image 5.7.19 -> 8.0, PostgreSQL image 9.6.3 -> 16
- Add yaml-dev for psych gem native extension
- Fix postgres volume mount path (/var/lib/mysql -> /var/lib/postgresql/data)
- Remove deprecated compose version key and links directive

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@nvolker nvolker requested a review from a team as a code owner March 31, 2026 13:10
- Create /home/gemstash/data with correct ownership before VOLUME
  directive, fixing "Base path is not writable" error
- Switch MySQL compose to MariaDB 11, since Alpine's mariadb-dev
  provides MariaDB Connector C which has SSL incompatibilities with
  MySQL 8.0's caching_sha2_password + self-signed certs
- Update healthcheck to use mariadb CLI and MARIADB_* env vars

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@nvolker nvolker marked this pull request as draft March 31, 2026 14:10
@nvolker
Copy link
Copy Markdown
Author

nvolker commented Mar 31, 2026

Will leave this in draft and let the SRE team take over: https://intellection.slack.com/archives/C02A8NRKE/p1774965766689369?thread_ts=1774955177.631019&cid=C02A8NRKE

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant