When your Ruby system install breaks after a Homebrew upgrade
January 18th, 2019
Recently I upgraded to Mojave on my Macbook Pro (late 2015). I then
decided it was also time to upgrade Homebrew. I needed to update postgres
,
so thought I would update everything else. postgres
was a success. Read more
in my posts entitled
Upgrading PostgreSQL from version 10.4 to 11.1 via Homebrew (OSX) and
Changing your (Homebrew) PostgreSQL configuration from trust to md5.
Unbeknownst to me until today, my Ruby system install broke in the process.
I hadn’t done anything related to Ruby installations in a couple of years,
and had to refresh my memory on it. Had I installed with RVM? I checked to
see if I had it installed on my computer. No. What else could I have used to
manage my Ruby installs? I googled for information regarding the error
I got when trying to watch a file on a Node project I am working on in which I
decided to switch from CSS to SCSS (today). I just find it to
be a much more efficient and powerful way to work with global styles. When I
tried to run sass --watch public/styles/styles.scss
, I got the following error
in my Terminal console:
can't find gem sass (>= 0.a) with executable sass (Gem::GemNotFoundException)
So then I decided to re-install
Sass. I ran
gem install sass
That did not work either. It installed Sass alright, but I had updated
Ruby with Homebrew, so installing the gem that way did not reach the
Homebrew Cellar. Then I remembered that since El Capitan, OSX
is a rootless system, and Apple prevents user applications (or users)
to modify /usr/bin
for security reasons. A
StackOverflow thread
I came across mentioned rbenv.
Like rvm
, rbenv
is a Ruby
installer and version manager which one can install via Homebrew.
And that is what I had done ages ago. I checked to see if it was installed on my
machine, and indeed it was! Then I googled to see how I could fix my issue with
rbenv
. I came across a very helpful post that helped me resolve my Ruby
problem.
The post takes you through the steps of installing rbenv
, but I already
had it installed. When I ran brew upgrade
, the upgrade probably affected
rbenv
as well! Evidently, the path to my Ruby got a bit screwed up. So
this is what I did:
First I checked to see what versions of Ruby I had available to me by
rbenv
to install with the command rbenv install -l
.
Next I wanted to make sure that my rbenv
system version was the same as
my ruby -v
. I ran rbenv global
and version 2.3.7
was returned from both
rbenv global
and ruby -v
.
Then I installed the latest version of Ruby available in rbenv
with
the command rbenv install 2.7.0-dev
.
Next I ran the command rbenv global
to check what my system version of
Ruby was after the rbenv install
. It returned 2.7.0-dev
. After
that, I checked to so what ruby -v
would output to Terminal just to make
sure that everything was on the same page. It too returned version 2.7.0-dev
.
Then I had to set a new global default version with 2.7.0-dev
using
rbenv
, so I ran the command rbenv global 2.7.0-dev
. I was not successful the
first time around. Probably because I had run the command gem install sass
which I did before fixing my Ruby upgrade. I suggest testing your
sass gem install
in an application to make sure it actually works. Version
displays mean nothing. It is the path that counts. Installing rbenv
modifies
the PATH
variable, adding its own directory before any of the others.
rbenv
’s path to Ruby when it executes a Ruby install is different from
what the default would be.
At first I got a strange stderr in Terminal when I tried to run
sass --watch
after installing ruby -v 2.7.0-dev
with rbenv
and
setting the new system version 2.7.0-dev
with rbenv global
. It was
the following:
Traceback (most recent call last): 2: from /usr/local/bin/sass:22:in <main>' 1: from /usr/local/Cellar/ruby/2.6.0/lib/ruby/2.6.0/rubygems.rb:302:inactivate_bin_path' /usr/local/Cellar/ruby/2.6.0/lib/ruby/2.6.0/rubygems.rb:283:in `find_spec_for_exe': can't find gem sass (>= 0.a) with executable sass (Gem::GemNotFoundException)
Thinking at first that I should install version 2.6.0
with rbenv
and
use it instead, I tried installing 2.6.0
and setting it as the system default.
After that, I ran sass --watch
and the resulting output
to Terminal was
that sass commands were only available with version 2.7.0-dev
. I
switched back to 2.7.0-dev
as my default system version and ran
sass --watch
again. This time I was successful. I don’t know how I got to the
point of success, but I did. I think this was related to the path issue I
mentioned earlier. Later I found another
StackOverflow thread
regarding the topic that might help those that have encountered Ruby issues
with their Mac for the first time that might be of help. It relates to High
Sierra, but should also apply to Mojave.
As mentioned in my article entitled How to save terminal output to a file for future reference, I closed out of the Terminal instance containing the stderr(s) related to Ruby/Sass before I could copy and paste them to a file for future reference. There I do discuss how to create commands or scripts to automate the process. This fuzziness will never happen again thanks to Command Line commands and Unix scripting!
Homebrew is fantastic and I have been using it since its inception. As with anything else, it too can have its moments. But in the end, everything is always ironed out.
Note: It is situations like this that got me started with this Developer Blog. Now I contribute to it much more religiously to record such occurrences and their resolutions for future reference. Writing things down is also a great way of committing it to memory and gaining a greater understanding of the subject matter! It’s also a way of giving back because of others who have helped me along the way.