This post will not explain in detail parts of the app's upgrade and only give general points about what I did a few months ago.
So I am a freelance Ruby on Rails developer, I was hired to work on Rails application upgrade five months ago. The application had several dependencies that needed to run on a separate server to reduce load on the main server.
Upgrading Ruby locally
The first step was upgrading the Ruby version. I used rbenv
for managing the Ruby version on my Mac. I used .ruby-version
file for managing active Ruby versions.
Upgrading rails and any other gems locally
I used bundle install
and bundle update
repeated until all gems can be installed successfully.
Install package dependencies locally
The app depends on several packages to run, so I need to install them locally too. I used a combination of brew
and orbstack / docker
for installing packages. Some dependencies for this project are redis
, mongodb
and memcache
Make the app work locally.
For upgrading steps, I did incremental update by increasing the Rails version step by step and making sure the app can bootup for each version, this also helped figure out any deprecated codes during the upgrade. I also made a switch for javascript build from therubyracer
to use nodejs
.
Staging Deployment.
The previous deployment was using capistrano v2
, and the client wants to stay with the same deployment method. So I just upgraded the code to use capistrano v3
.
We split the staging server into two instances using Ubuntu 22.04 as the base image. The first instance is for a web server with nginx
, passenger
and MySQL. The second instance is for the support server and this is where we install redis, memcache, mongodb and resque
.
For database, we just apply sql dump file from old staging server.
Production deployment
Production deployment actually just similar to staging deployment, but we did more carefully.