Jak sprawić, by Ruby / Homebrew / RVM działało na Yosemite?

118

Po zainstalowaniu Yosemite nie mogłem uruchomić brew ani ruby.

Otrzymałem ten błąd podczas aktualizacji zaparzania:

/usr/local/bin/brew: /usr/local/Library/brew.rb: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby: bad interpreter: No such file or directory
/usr/local/bin/brew: line 23: /usr/local/Library/brew.rb: Undefined error: 0

otrzymywanie tego błędu na irb:

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:245:in mkdir': Permission denied - /Library/Ruby/Gems/2.0.0/extensions/universal-darwin-14 (Errno::EACCES) from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:245:infu_mkdir'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:219:in block (2 levels) in mkdir_p' from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:217:inreverse_each'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:217:in block in mkdir_p' from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:203:ineach'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:203:in mkdir_p' from /Library/Ruby/Site/2.0.0/rubygems/ext/builder.rb:210:inwrite_gem_make_out'
from /Library/Ruby/Site/2.0.0/rubygems/ext/builder.rb:132:in build_error' from /Library/Ruby/Site/2.0.0/rubygems/ext/builder.rb:171:inrescue in build_extension'
from /Library/Ruby/Site/2.0.0/rubygems/ext/builder.rb:156:in build_extension' from /Library/Ruby/Site/2.0.0/rubygems/ext/builder.rb:198:inblock in build_extensions'
from /Library/Ruby/Site/2.0.0/rubygems/ext/builder.rb:195:in each' from /Library/Ruby/Site/2.0.0/rubygems/ext/builder.rb:195:inbuild_extensions'
from /Library/Ruby/Site/2.0.0/rubygems/specification.rb:1436:in block in build_extensions' from /Library/Ruby/Site/2.0.0/rubygems/user_interaction.rb:45:inuse_ui'
from /Library/Ruby/Site/2.0.0/rubygems/specification.rb:1434:in build_extensions' from /Library/Ruby/Site/2.0.0/rubygems/stub_specification.rb:60:inbuild_extensions'
from /Library/Ruby/Site/2.0.0/rubygems/basic_specification.rb:56:in contains_requirable_file?' from /Library/Ruby/Site/2.0.0/rubygems/specification.rb:925:inblock in find_inactive_by_path'
from /Library/Ruby/Site/2.0.0/rubygems/specification.rb:924:in each' from /Library/Ruby/Site/2.0.0/rubygems/specification.rb:924:infind'
from /Library/Ruby/Site/2.0.0/rubygems/specification.rb:924:in find_inactive_by_path' from /Library/Ruby/Site/2.0.0/rubygems.rb:185:intry_activate'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/locale.rb:150:in block in search_file' from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/locale.rb:158:inblock in each_localized_path'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/locale.rb:167:in each_sublocale' from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/locale.rb:157:ineach_localized_path'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/locale.rb:145:in search_file' from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/locale.rb:124:infind'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/locale.rb:108:in load' from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/locale.rb:32:ininitialize'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/init.rb:114:in new' from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/init.rb:114:ininit_config'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/init.rb:16:in setup' from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb.rb:380:instart'
from /usr/bin/irb:12:in `'
eden
źródło

Odpowiedzi:

281

Ten błąd można łatwo naprawić, wykonując następujące czynności:

1) Otwórz terminal

2) Typ nano /usr/local/Library/brew.rb

3) W pierwszym wierszu zmień „1.8 ″ na„ Bieżący ”, więc powinno wyglądać tak:

#!/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby -W0

przez http://blog.ic3man.gr/2014/06/homebrew-ruby-bad-interpreter-no-such-file-or-directory/

raz0r
źródło
14
kiedy wprowadzam tę zmianę, pojawia się błąd „Homebrew wymaga Leoparda lub nowszego. Aby uzyskać pomoc techniczną dla Tigera, zobacz: github.com/mistydemeo/tigerbrew ”, mimo że używam yosemite
scientiffic
4
daje to Please, commit your changes or stash them before you can merge.błąd przy próbie brew updateniestety.
Naoise Golden
10
„C” musi być pisane wielką literą dla opcji Bieżący#!/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby -W0
Diablo,
@Diablo Myślę, że to zostało zaktualizowane w 10.10.1. We wcześniejszej wersji „C” nie było pisane wielką literą. Dzięki.
raz0r
1
Dostałem również Homebrew requires Leopard or higher- postępowałem zgodnie z odpowiedzią poniżej zainstaluj narzędzia wiersza poleceń xcode i teraz działa: stackoverflow.com/a/24225960/1062936
greg
39

Zaktualizowałem do Yosemite, a później okazało się, że brewjest uszkodzony.

/usr/local/bin/brew: /usr/local/Library/brew.rb: 
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby: bad interpreter: No such file or directory /usr/local/bin/brew: line 23: /usr/local/Library/brew.rb: Undefined error: 0

Jeśli nie wprowadziłeś jeszcze żadnych zmian w naparzaniu, oto co polecam. W przeciwnym razie przeczytaj dalej poniżej.

  1. cd /System/Library/Frameworks/Ruby.framework/Versions/
  2. sudo ln -s Current 1.8
  3. brew update
  4. sudo unlink 1.8

Dokonałeś już zmian w plikach warzenia i utknąłeś w bałaganie?

Próbowałem edytować, /usr/local/Library/brew.rbale lokalna zmiana w moim repozytorium git uniemożliwiała brew updatepobieranie aktualizacji. Wypróbowałem kilka innych rozwiązań wymienionych na tej stronie oraz z innych witryn i skończyło się na tym, że zrobiłem bałagan i wszystko, co chciałem zrobić, to cofnąć wszystko, co zrobiłem, aby uwarzyć.

Popełniłem swoją zmianę, ale to pogorszyło sprawę. Ostatecznie musiałem cofnąć zatwierdzenie i git reset --hard HEAD~1dopóki nie doszedłem do właściwego zatwierdzenia. Miałem też bałagan niewersjonowanych plików (zmieniłem uprawnienia do plików w / usr / Local), więc zrobiłem, git clean -f -dco usunęło wszystkie niewersjonowane pliki i katalogi i wróciło do miejsca, w którym zacząłem, zanim wprowadziłem jakiekolwiek zmiany.

Jason R.
źródło
3
Ta odpowiedź zadziałała (w tym cofnięcie bałaganu git), gdzie jako najwyżej oceniona odpowiedź pozostawiła problem z git.
Steve M
Bardzo przydatne po uaktualnieniu systemu! Dzięki
uzależniony od kodowania
To kończy się niepowodzeniem w El Capitan z „ln: operacja niedozwolona” z powodu trybu bez rootowania. Można znaleźć obejście tutaj: apple.stackexchange.com/questions/196224/...
Jorge Ortiz
37

Kroki, aby to naprawić:

  1. Zainstaluj narzędzia wiersza poleceń dla Xcode 6

  2. Zainstaluj ponownie napar:

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  3. Po zainstalowaniu naparu rvm będzie działać:

    rvm install ruby

Pracował dla mnie, yahoo!

eden
źródło
Mam uruchomiony Ruby, ale to nadal nie działa dla mnie: stackoverflow.com/questions/24113251/ ...
eden
Całkowicie usunąłem rvm i nginx i ponownie je zainstalowałem po zainstalowaniu narzędzi programistycznych Xcode 6. Teraz działa jak urok.
Wout
1
To też zadziałało dla mnie, chciałem tylko wyjaśnić, aby uruchomić to polecenie dla kroku 1: xcode-select --install
James Toomey
33

Edycja skryptu oznacza, brew updateże nie zadziała; istnieją lokalne edycje śledzonych plików, które powodują git pullniepowodzenie.

Zrobiłem to, co podejrzewam, że jest czystsze:

cd /usr/local/Library
git pull -q origin refs/heads/master:refs/remotes/origin/master

Nie ma żadnych skarg od brew doctor.

Otto
źródło
Kiedy to robię, pojawia się błąd dotyczący nieśledzonych plików, które należy przenieść przed scaleniem. To są wszystkie pliki w Library / Formula /.
wrzesień
Zakładając, że nic nie edytowałeś, kiedy to mi się przydarza, oznacza to, że muszę uruchomić brew doctori postępować zgodnie z instrukcjami. Problem polega na tym, że brew doctorprawdopodobnie nie działa dla ciebie, jeśli tu jesteś. Możesz po prostu to zrobić git stashi kontynuować.
Otto
7

To konglomerat odpowiedzi z postów innych osób, a także trochę kopania w Google, ale pomyślałem, że umieściłem to, więc pełna odpowiedź jest w jednym miejscu. W szczególności sprawia to, że teraz wszystko działa, ale także pozwala robić aktualizacje w normalny sposób i ponownie wszystko jest czyste.

  1. Otwórz /usr/local/Library/brew.rb (emacs / vi / nano / cokolwiek)
  2. Zmienić pierwszy wiersz w brzmieniu: #!/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby -W0. Po prostu zmieniasz „1.8”, które było w tym wierszu na „Bieżące” (upewnij się, że trzymasz duże „C”, w przeciwnym razie git będzie później zdezorientowany).
  3. cd $(brew --repository)
  4. git add Library/brew.rb
  5. git commit -m "upgrading to ruby 2.0"
  6. brew update(lub sudo brew updatejeśli twój napar jest skonfigurowany do dokonywania zmian systemowych tylko za pomocą sudo)

Kredyt: wiele z tego pochodzi stąd , chociaż naprawdę odradzam robienie tego git commit -amw folderze / usr / local.

Eli
źródło
To jedyne rozwiązanie, które u mnie zadziałało. To z powodu częstych super brzydkich bałaganów, takich jak ten, odchodzę od Ruby i Rails na moją następną aplikację.
Deborah
3

Jak poprzednio powiedział: 1) Zmień na bieżący 2) zainstaluj xcode 6

Jeśli masz teraz dalsze problemy z brew i ruby, to powinno pomóc: Jakoś brew potrzebuje ruby ​​w wersji 1.8, więc utwórz folder:

sudo mkdir -p /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin

i utwórz link symboliczny:

sudo ln -s /usr/bin/ruby /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
Vanessa Böhner
źródło
Dzięki! To było jedyne rozwiązanie, które u mnie zadziałało;)
alejandromp
2

Spójrz na ten samouczek tutaj: http://ryantvenge.com/2014/09/ruby-homebrea-yosemite/

U mnie zadziałało!

user790999
źródło
Chociaż ten link może odpowiedzieć na pytanie, lepiej jest to zasadnicze części odpowiedź tutaj i podaj link do odniesienia. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie.
bummi
1

Naprawiłem to w następujący sposób :

  1. sudo chown -R $(whoami):admin /usr/local
  2. cd $(brew --prefix) && git fetch origin && git reset --hard origin/master
Alex Lin
źródło
0

Uwaga: wykonaj poniższe czynności tylko wtedy, gdy skończysz w stanie całkowitej awarii, ponieważ jest to bardzo NIEBEZPIECZNE

Jako przykład wciąż otrzymywałem

$ sudo ln -s Bieżąca 1.8

Aktualizacja $ brew

/usr/local/Library/brew.rb:18:in ': undefined method help?' for [„update”]: Array (NoMethodError)

Po prostu rozumiem… (bez względu na to, jakie polecenie po prostu wyłącz „aktualizuj” za pomocą polecenia) Rozwiązałem problem, prosząc o /usr/localfolder znajomych . Następnie wykonałem kopię zapasową mojego /usr/localfolderu.

sudo mv / usr / local /usr/local.orig

Następnie przeniosłem jego /usr/localdo swojego

sudo mv ~ / Downloads / local / usr / local

Uwaga: prawdopodobnie utracisz część danych, więc zrób kopię zapasową.

abc123
źródło
-1

Miałem problemy z instalacją Rubiego za pomocą menedżerów pakietów. Uczciwie odnosząc się do tych programów, przyznaję, że mam z nimi niewielkie doświadczenie i nie starałem się sięgać głębiej, jak zrobiła to większość pozostałych respondentów. Jestem leniwy i wolę korzystać z instalatora binarnego dostępnego dla większości opcji opsys i wielu pakietów. Niestety, wydaje się, że Ruby go nie dostarcza.

Zauważyłem, że Ruby-build jest łatwy do zainstalowania (samodzielny - nie wtyczka) i zbudował Ruby ze źródeł bez błędów i umieścił go tam, gdzie chciałem.

Bingo - łatwe :) Wygląda na to, że jest to dobra alternatywa dla tych z nas, którzy menedżerowie pakietów rzucili wyzwanie perswazji.

Charlie

Charles Parker
źródło