Installing Gem in Production Rails console

For a good few years, I have been using awesome_print for improved readability in rails console. But recently, I came across an issue where I had to read Audits from the console and my usual saviour awesome_print wasn't bundled.
So, I stopped doing what I was meant to and spent next few hours figuring out,
how can I install a gem in any environment without making code changes?

So, apparently this is possible by updating the $LOAD_PATH variable and then requiring the gem manually.
In Ruby, an identifier starting with a $ symbol is a global variable. $LOAD_PATH is an array of absolute paths i.e it stores the exact location of all the dependencies in the project.

So, let's assume we want to install awesome_print in a production Rails Console. We can do so by following these steps:

  • SSH into the production server.
  • Run this to install the gem,

bundle install awesome_print

  • Run this to figure out the path where gem is installed,

gem which awesome_print

which should give something like,

/home/user/.asdf/installs/ruby/2.7.0/lib/ruby/gems/2.7.0/gems/awesome_print-1.9.2/lib/awesome_print.rb

  • Now, lets start our Rails console
  • We can add the path of this gem to the $LOAD_PATH global variable using:

$LOAD_PATH << /home/user/.asdf/installs/ruby/2.7.0/lib/ruby/gems/2.7.0/gems/awesome_print-1.9.2/lib

  • Let's try and require our freshly installed gem using:

require "/home/user/.asdf/installs/ruby/2.7.0/lib/ruby/gems/2.7.0/gems/awesome_print-1.9.2/lib/awesome_print.rb"

Follow the above steps and you should be able to install and use any gem you want on your production server without making any code changes.

28