pdel
pdel

Reputation: 705

OSX Homebrew error: uninitialized constant MACOS

I've searched around a bit and can't seem to find any record of anyone else with this problem.

Whenever I try to run

$ brew update

I am rewarded with

/usr/local/bin/brew:34: uninitialized constant MACOS (NameError)

This isn't my machine and I normally develop on Linux systems so this is all a bit odd to me.

Any help would be greatly appreciated! Please tell me if there is any additional info I should provide. Again, I'm not used to homebrew or OSX.

EDIT at the request of JameA

xiao:~ patrick$ brew doctor
/usr/local/bin/brew:34: uninitialized constant MACOS (NameError)
xiao:~ patrick$ brew --config
/usr/local/bin/brew:34: uninitialized constant MACOS (NameError)

...Not sure I like this whole "here, use this macbook for the project, it works better" thing...

Upvotes: 9

Views: 9075

Answers (5)

Sahil J
Sahil J

Reputation: 695

I had a similar issue, when I Killed an install mid-way with Ctrl-D. Post that whenever I tried installing anything it gave the following error

uninitialized constant Homebrew::CLI::Parser::ARGV_WITHOUT_MONKEY_PATCHING

As a fix, I went to the directory I had where homebrew was installed, and reset the HEAD.

cd /usr/local/Homebrew
git status 
git checkout .

And then it started working magically. Resetting Homebrew to master

Upvotes: 4

bact'
bact'

Reputation: 64

In addition to Matt Korostoff's answer. On point 3 (resetting the repo), for recent version of Homebrew, the repo is no longer /usr/local, do cd "$(brew --repo)" instead.

Upvotes: 0

Matt Korostoff
Matt Korostoff

Reputation: 2132

I'm pretty sure the root cause of this is a failed upgrade attempt to Homebrew 0.9.5 from a much earlier version. Basically, if you run brew update as opposed to sudo brew update a portion of files are updated, while others are not. Here's what worked for me:

  1. Edit /usr/local/bin/brew (it's just a Ruby file, not a compiled binary, so any text editor will do). You'll find a block like:

    if MACOS and MACOS_VERSION < 10.5
      abort <<-EOABORT.undent
        Homebrew requires Leopard or higher. For Tiger support, see:
        https://github.com/mistydemeo/tigerbrew
      EOABORT
    end
    

    Comment this out. Even if you don't know Ruby, you can probably intuit what this is doing—it's checking to see if you have a current version of OSX. Assuming that you do in fact have this version, this sanity check isn't necessary. Brew is still broken, but at least now it will load far enough to give error messages.

  2. Run sudo brew update, spoiler alert: it fails, but this time with a meaningful error message:

     $ brew update
     error: Your local changes to the following files would be overwritten by merge:
     [giant list of files here]
    

    Well, today I learned that brew update is just a wrapper for git pull because anyone who has worked with git knows that error message. We can fix this too.

  3. Switch into the homebrew git repository with cd /usr/local and give the command git reset --hard FETCH_HEAD. This piece found here.

  4. Give the command sudo brew update. Homebrew should now update successfully and work properly!

Once the system is working again, you can actually kind of see why an error like this would have occurred. For one, usr/local/bin/brew has been completely rewriten and isn't even Ruby anymore, and most of its configuration has been moved into /usr/local/Library/brew.rb which no longer uses the constants MACOS or MACOS_VERSION constants, as they have been replaced by the more object oriented OS.mac and MacOS.version.

Upvotes: 10

Ernest Carroll
Ernest Carroll

Reputation: 11

I had a similar error with a "borked" installation of brew. I removed the small 5 line block of code in the /usr/local/bin/brew script starting with the MACOS line. That did the trick to allow me to uninstall and eventually reinstall it.

Upvotes: 1

James Allman
James Allman

Reputation: 41168

The MACOS constant is set in globals.rb. It seems like you may have a borked installation of Homebrew.

Check the output of brew doctor for any suggestions.

If that doesn't help please update with the results of brew --config.

If all else fails you may want to try re-installing Homebrew.


UPDATE:

Since this was a previous user's machine make sure your user is the owner of /usr/local and everything within. Fix it with sudo chown -R $USER /usr/local.

Upvotes: 3

Related Questions