Вопрос по macos, homebrew – OSX Homebrew ошибка: неинициализированная константа MACOS

9

Я немного искал и, похоже, не нашел ни одной записи кого-либо еще с этой проблемой.

Всякий раз, когда я пытаюсь бежать

$ brew update

Я награжден

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

Это не моя машина, и я обычно работаю в системах Linux, так что это немного странно для меня.

Любая помощь будет принята с благодарностью! Скажите, пожалуйста, есть ли какая-либо дополнительная информация, которую я должен предоставить. Опять же, я не привык к домашнему пиву или OSX.

EDIT по просьбе 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)

... Не уверен, что мне нравится весь этот & quot; здесь, используйте этот macbook для проекта, он работает лучше & quot; вещь...

Что находится в строке 34 этого файла (/ usr / local / bin / brew)? Моя строка 34 не имеет постоянной MACOS, но имеет MACOS_VERSION. Но в любом случае просмотр кода помог бы узнать, что происходит. nickgroenke
@ user108798134 if MACOS and MACOS_VERSION < 10.5 @Usman$ which brew /usr/local/bin/brew pdel
что значит "который варится"; дает тебе? Usman

Ваш Ответ

4   ответа
10

Я уверен, что основной причиной этого является неудачная попытка обновления до Homebrew 0.9.5 с более ранней версии. В основном, если вы запускаетеbrew update в отличие отsudo brew update часть файлов обновляется, а другие нет. Вот что сработало для меня:

  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!

Как только система снова заработает, вы сможете увидеть, почему произошла такая ошибка. Для одного,usr/local/bin/brew былполностью переписан и даже больше не Ruby, и большая часть его конфигурации была перенесена в/usr/local/Library/brew.rb который больше не использует константыMACOS или жеMACOS_VERSION константы, так как они были заменены на более объектно-ориентированныеOS.mac а такжеMacOS.version.

Отличный ответ - большое спасибо!
1

У меня была похожая ошибка с "borked" установка варева. Я удалил небольшой 5-строчный блок кода в скрипте / usr / local / bin / brew, начиная со строки MACOS. Это помогло мне удалить и переустановить его.

0

В дополнение к ответу Мэтта Коростова. В пункте 3 (сброс репо) для последней версии Homebrew репо больше не работает./usr/local, делатьcd "$(brew --repo)" вместо.

3

MACOS константа установлена вglobals.rb, Похоже, у вас может быть установка Homebrew.

Проверьте выводbrew doctor за любые предложения.

Если это не помогло, пожалуйста, обновите результатыbrew --config.

Если ничего не помогает, вы можете попробовать переустановить Homebrew.


UPDATE:

Поскольку это был компьютер предыдущего пользователя, убедитесь, что ваш пользователь является владельцем/usr/local и все внутри. Исправить это сsudo chown -R $USER /usr/local.

Обновил вопрос с результатами. Я склоняюсь к сорванной установке, хотя, до того, как я ее получил, это была чья-то система разработки, и в ней все еще есть учетные записи и программное обеспечение из последнего проекта. Мне нужно уговорить моего босса позволить мне сделать новую установку. Я точно знаю, что на нем что-то сломалось, он вылетает при попытке обновить систему. pdel

Похожие вопросы