Gems when using Ruby via Software Collections

In my previous article I outlined how to get Ruby installed via RedHat Software Collections (SCL) and this works for basic ruby commands until I tried to install my backup gem. I got an install error when trying to build the native extensions. This guide will show you how to install gems when using ruby via software collections.

[root@machine1 ~]# gem install backup
Building native extensions.  This could take a while...
ERROR:  Error installing backup:
ERROR: Failed to build gem native extension.
        /opt/rh/ruby193/root/usr/bin/ruby extconf.rb
mkmf.rb can't find header files for ruby at /opt/rh/ruby193/root/usr/share/include/ruby.h
Gem files will remain installed in /opt/rh/ruby193/root/usr/local/share/gems/gems/atomic-1.1.14 for inspection.
Results logged to /opt/rh/ruby193/root/usr/local/share/gems/gems/atomic-1.1.14/ext/gem_make.out

I will need to install the relevant development tools to get this working. When installing ruby using other methods some how-to’s tell you to do the blanket install of all development tools. I want to make sure I run as lean an OS image as possible. So I will only install the required packages by running the following:

sudo yum install gcc gcc-c++ make automake autoconf curl-devel openssl-devel zlib-devel httpd-devel apr-devel apr-util-devel sqlite-devel ruby193-ruby-doc ruby193-ruby-devel ruby193-build

I now have everything I need to get gem to build the native extensions. So I run the command to install backup again and everything succeeds.

gem install backup

The only problem I have now is that when I try to run backup I get the following:

[root@machine1 ~]# backup
-bash: backup: command not found

This is because the gem was installed inside of the software collections path so we will need to add this path to our existing path.

echo "pathmunge /opt/rh/ruby193/root/usr/local/bin" | sudo tee -a /etc/profile.d/

This is the same for any gems you install that need building. Once you’ve done the above gem install somegem commands will work.

Share on facebook
Share on twitter
Share on linkedin
Share on reddit
Share on pinterest
Share on facebook