Deep Ruby on Rails expertise
Azati has extensive experience developing and maintaining Ruby on Rails applications, including complex multi-version upgrade paths and legacy codebase modernization without rewrites.
A DevOps services company running mission-critical server infrastructure for external clients needed a reliable engineering partner to maintain, extend, and modernize their heavily customized Redmine platform. Azati took ownership of the full plugin ecosystem, executed a major version upgrade across the entire stack, and kept all business operations running without interruption.
Let's discuss your Redmine needsmajor system components upgraded
custom plugins maintained and adapted
business continuity preserved
The client is a DevOps managed services provider running 24/7 server infrastructure support for external clients. To manage their operations internally, they built a heavily customized Redmine platform, spanning task management, time tracking, SLA reporting, and billing, that over time became too complex and business-critical to maintain without dedicated Ruby on Rails expertise.
The platform ran on legacy versions of Ruby, Rails, Redmine, Sidekiq, and Redis, with known security vulnerabilities and growing incompatibility risks across the whole ecosystem.
The codebase had almost no automated tests and sparse documentation for custom business logic, making a safe major upgrade appear nearly impossible without breaking things.
30+ custom and commercial plugins needed to keep working post-migration, each with unique integrations, interdependencies, and zero safety net from tests.
The company needed a seasoned Ruby on Rails partner able to step in, learn the system quickly, and take full ownership of its development and stability. Specifically:
Azati has extensive experience developing and maintaining Ruby on Rails applications, including complex multi-version upgrade paths and legacy codebase modernization without rewrites.
The team had prior hands-on experience building and adapting Redmine plugins, understanding the framework's extension points, hook system, and engine-level constraints across versions.
Azati has a structured methodology for navigating upgrades with minimal or absent test coverage, audit-first, incremental change, manual verification tracking, which was directly applicable here.
Worried about upgrading without breaking business-critical workflows?
Let's plan your Rails migrationRather than proposing a rewrite, risky given the absence of tests and the deeply embedded business logic, Azati chose an audit-first, incremental approach: understand the system fully before touching it, then upgrade and adapt component by component.
| Metric | Before | After |
|---|---|---|
| Redmine | Legacy | 6.1.1 |
| Ruby | 2.7 | 3.3.10 |
| Rails | 6.1 | 7.2.3 |
| Sidekiq | 5.2.9 | 7.3.9 |
| Redis | 5.0.7 | 8.4.0 |
| PostgreSQL | Legacy | 14 (prod/stage separated) |
| OS / servers | Legacy | AlmaLinux 9 |
The platform is secured with SSL/TLS encryption, SSH access controls, and OAuth 2.0 authentication, with role-based access enforced across all sensitive data, including encrypted credential storage and protected wiki documentation. Upgrading to fully supported versions of Ruby, Rails, and Redmine closed a backlog of known CVEs that had accumulated on the legacy stack.
Full-stack upgrade, zero disruption: All major components, Ruby, Rails, Redmine, Sidekiq, Redis, PostgreSQL, upgraded without interrupting client workflows, SLA delivery, or internal operations.
Security vulnerabilities closed: Migration to actively maintained releases of Ruby, Rails, and Redmine eliminated a backlog of known CVEs inherited from the legacy stack.
30+ plugins preserved: Every custom, open-source, and commercial plugin was verified, adapted, and confirmed functional in the new environment.
Modernized infrastructure: Full migration to AlmaLinux 9 servers with separated prod/staging databases, improving deployment safety and environment isolation.
Operational visibility gained: Sidekiq queue monitoring replaced with sidekiq-throttled, providing a live dashboard and eliminating a long-standing blind spot in job processing.
Automation extended: New and updated plugins cover task scheduling, checklists, SLA report generation, and CRM sync, directly supporting the client's DevOps workflows.
Foundation for safer changes: Targeted test coverage introduced on critical paths on Azati's initiative, reducing regression risk for future development.
The choice of incremental upgrade over a full rewrite ensured:
Upgrading to fully supported versions of Ruby, Rails, and Redmine closed a backlog of known CVEs. The platform is no longer running on components that receive no security patches, a meaningful risk reduction for a system handling sensitive infrastructure access and client data.
The incremental upgrade strategy preserved years of embedded business logic, SLA rules, billing automation, and CRM integrations, while bringing the platform fully up to date. The system can now evolve safely for years to come without a costly rewrite.
Separating production and staging databases, migrating to modern AlmaLinux 9 servers, and eliminating unsupported dependencies gives the team a well-isolated foundation, reducing the risk of environment-level incidents as the client's customer base grows.
The client gained long-term access to Redmine plugin expertise, Telegram API and TDLib integration skills, and a proven Rails upgrade methodology, capabilities that are rare to find and difficult to build in-house for a team focused entirely on infrastructure services.
Last updated