Nie można zainstalować klejnotów w systemie OS X „El Capitan”

182

Nie mogę zainstalować i uruchomić fakes3klejnotu na El Capitan Beta 5.

Próbowałem:

sudo gem install fakes3
ERROR:  While executing gem ... (Errno::EPERM)
    Operation not permitted - /usr/bin/fakes3

Potem spróbowałem zrobić to w sposób kokosowy. Działa w przypadku kokosów, ale nie w przypadku podróbek3.

mkdir -p $HOME/Software/ruby
export GEM_HOME=$HOME/Software/ruby
gem install cocoapods
[...]
1 gem installed
gem install fakes3
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
Himanshu Yadav
źródło
3
Nie używaj sudodo instalowania Ruby ani zmieniania klejnotów. Zamiast tego użyj rbenv lub RVM, aby zainstalować Ruby i zarządzać nim. Przeczytaj i postępuj zgodnie ze wskazówkami na odpowiednich stronach. W obu przypadkach po instalacji nie używaj, sudochyba że rozumiesz, co się zmienia i dlaczego chcesz to zrobić.
Tin Man,

Odpowiedzi:

333

Oświadczenie: @tinMan i inni programiści Ruby często zwracają uwagę, aby nie używać ich sudopodczas instalowania klejnotów i wskazują na rzeczy takie jak RVM . Jest to absolutnie prawdziwe podczas tworzenia języka Ruby. Śmiało i użyj tego.

Jednak wielu z nas po prostu niektóre binarny, że dzieje się dystrybuowany jako gem (np fakes3, cocoapods, xcpretty...). Zdecydowanie nie chcę zawracać sobie głowy zarządzaniem oddzielnym rubinem. Oto twoje szybsze opcje:

Opcja 1: Kontynuuj używanie sudo

Używanie sudojest prawdopodobnie w porządku, jeśli chcesz, aby te narzędzia były instalowane globalnie.

Problem polega na tym, że te pliki binarne są zainstalowane /usr/bin, co jest niedostępne od czasu El Capitan. Możesz jednak zainstalować je /usr/local/binzamiast tego. Tam Homebrew instaluje swoje rzeczy, więc prawdopodobnie już istnieją.

sudo gem install fakes3 -n/usr/local/bin

Klejnoty zostaną zainstalowane /usr/local/bini każdy użytkownik w twoim systemie będzie mógł z nich korzystać, jeśli znajduje się w ŚCIEŻCE .

Opcja 2: Zainstaluj w swoim katalogu domowym (bez sudo)

Poniżej zainstaluje klejnoty ~/.gemi umieści pliki binarne w ~/bin(które należy następnie dodać do swojego PATH).

gem install fakes3 --user-install -n~/bin

Ustaw jako domyślny

Tak czy inaczej, możesz dodać te parametry do swoich ~/.gemrc, abyś nie musiał ich pamiętać:

gem: -n/usr/local/bin

to znaczy echo "gem: -n/usr/local/bin" >> ~/.gemrc

lub

gem: --user-install -n~/bin

to znaczy echo "gem: --user-install -n~/bin" >> ~/.gemrc

( Wskazówka: Możesz także wrzucić, --no-documentaby pominąć generowanie dokumentacji dla programistów Ruby.)

nschum
źródło
Dziękuję bardzo! Walczyłem z nowymi wersjami brew i ruby, ale nadal nie mogłem przejść problemu / usr / bin. Określenie żądanej ścieżki podczas działania gem installrozwiązało problem.
Daniel Saidi
.gemrcPowinien mieć gem: -n /usr/local/bin(potrzeba spację po -n).
Paul Schreiber
@PaulSchreiber Cóż, używam go bez miejsca od pięciu miesięcy. :) Jesteś pewny?
nschum
2
Plus 1 dla Opcji # 2, która jest realną i bezpieczną alternatywą, jeśli chcesz tylko tych plików binarnych bez osobnego Ruby. Nasze katalogi domowe są idealnym miejscem na dodatkowe klejnoty, a szybki dostęp do PATH czyni je dostępnymi. Nie mogę polecić opcji nr 1, ponieważ ktoś skończy nadpisywanie klejnotu i uszkodzenie swojego systemu Ruby lub wbudowanego kodu Apple, który go używa, a następnie zadaje kolejne pytanie na SO, jak to naprawić.
Tin Man
1
To doskonała odpowiedź, ale może nieaktualna. W Sierra potrzebowałem opcji --install-dir / usr / local / bin
Ryan Ballantyne
107

W moim przypadku musiałem ponownie zainstalować Ruby przy użyciu Brew . Wydaje się, że to rozwiązało problem, ponieważ mogę ponownie zainstalować klejnoty.

brew install ruby

Następnie musisz się wylogować i zalogować ponownie, graficznie lub po prostu ponownie uruchamiając terminal.

Francisco Gonzalez Rull
źródło
Działa dobrze dla mnie! Podejrzewam, że pozbywa się wszelkich dziwności w dołączonej instalacji ruby ​​... IMO to najlepsze rozwiązanie.
n13
Możesz powiedzieć, który ruby ​​jest uruchamiany za pomocą `` which -a ruby ​​`` `Na mojej maszynie, która daje:` `$ which -a ruby ​​/ usr / local / bin / ruby ​​/ usr / local / bin / ruby ​​/ usr / bin / ruby ​​`` Co do tego, dlaczego / usr / local / bin jest na PATH dwa razy - wygląda na brew install rubyto, że go tam umieszcza, nawet jeśli już tam jest. Przypuszczalnie ruby ​​w / usr / local jest skonfigurowany do instalowania swoich klejnotów w miejscu, które nie wymaga dostępu do roota (co w rzeczywistości ma sens).
WallStProg,
7
PS Musisz się wylogować i zalogować ponownie (przez Terminal), w przeciwnym razie gem installnadal się nie powiedzie.
WallStProg,
Działa dobrze dla mnie. Połączyłem zaakceptowaną odpowiedź z tą jedną. Dziękuję obojgu
youssman
1
Nie musisz się wylogowywać i ponownie logować. Wystarczy uruchomić rehash, aby upewnić się, że zdaje sobie sprawę, że powłoki nowe rubywcześniej na $PATH. Nawet to nie będzie konieczne w sytuacji, gdy rubyjeszcze nie uruchomiłeś się w sesji powłoki.
Radon Rosborough
38

Wynika to z nowej funkcji bezpieczeństwa OS X „El Capitan”. Spróbuj dodać --user-installzamiast używać sudo:

$ gem install *** --user-install

Na przykład, jeśli chcesz zainstalować Fake3, po prostu użyj:

$ gem install fake3 --user-install
Shao Wenbin
źródło
Tak! Dziękuję bardzo!
Louis Magnotti
Po spędzeniu 30 minut z podejściem do zaparzania, zamykaniu terminalu itp. To rozwiązanie działało w dniu 10.10.5. Ale nadal nie jestem pewien, dlaczego podejście do zaparzania nie działało. Proszę o wyjaśnienie. który ruby ​​post brew install / usr / bin / ruby
vikramvi
1
Wow, teraz problem wrócił gem gem redcarpet -v '3.3.4' - błąd rzucania instalacji przez użytkownika OSTRZEŻENIE: Nie masz /Users/user_name/.gem/ruby/2.0.0/bin w ŚCIEŻCE pliki wykonywalne nie będą działać. Wcześniej nie otrzymywałem tego błędu
vikramvi
1
stackoverflow.com/questions/19579392/... , to pomogło mi w końcu rozwiązać problem
vikramvi
25
sudo gem install -n /usr/local/bin cocoapods

Spróbuj tego. To na pewno zadziała.

Femina Brahmbhatt
źródło
2
absolutnie nie.
Maarten Hartman,
19

Musisz zaktualizować Xcode do najnowszego (v7.0.1) i wszystko będzie działać normalnie.

Jeśli po zainstalowaniu najnowszego Xcode i nadal nie działa spróbuj zainstalować klejnot w ten sposób:

sudo gem install -n /usr/local/bin GEM_NAME_HERE

Na przykład:

sudo gem install -n /usr/local/bin fakes3
sudo gem install -n /usr/local/bin compass
sudo gem install -n /usr/local/bin susy
astrasleepz
źródło
10

Wygląda na to, że podczas aktualizacji do OS X El Capitain katalog / usr / local jest modyfikowany na wiele sposobów:

  1. uprawnienia użytkownika są resetowane (jest to również problem dla osób korzystających z Homebrew)
  2. pliki binarne i dowiązania symboliczne mogły zostać usunięte lub zmienione

[Edytuj] Jest jeszcze jedna rzecz do zrobienia: uaktualnij Xcode ...

Rozwiązanie dla nr 1:

$ sudo chown -R $(whoami):admin /usr/local

To naprawi uprawnienia do /usr/localkatalogu, co pomoże w poprawnym działaniu obu poleceń gem installi brew install|link|...poleceń.

Rozwiązanie nr 2:

Problemy oparte na Ruby

Upewnij się, że naprawiłeś uprawnienia do /usr/localkatalogu (patrz # 1 powyżej)

Najpierw spróbuj ponownie zainstalować klejnot, używając:

sudo gem install <gemname>

Pamiętaj, że zainstaluje najnowszą wersję określonego klejnotu.

Jeśli nie chcesz zmierzyć się z problemami z kompatybilnością wsteczną, sugeruję najpierw ustalić, którą wersję klejnotu chcesz uzyskać, a następnie zainstalować ją ponownie za pomocą -v version. Zobacz przykład poniżej, aby upewnić się, że system nie otrzyma nowej wersji capistrano.

$ gem list | grep capistrano
capistrano (3.4.0, 3.2.1, 2.14.2)
$ sudo gem install capistrano -v 3.4.0

Problemy związane z parzeniem

Zaktualizuj napar i ulepsz swoje formuły

$ brew update
$ brew upgrade

Konieczne może być także ponowne połączenie niektórych z nich ręcznie

$ brew link <formula>
foobar
źródło
3

Jak już powiedziano, problem pochodzi z funkcji bezpieczeństwa Mac OSX od „El Capitan”.

Używając domyślnego systemu Ruby, proces instalacji odbywa się w /Library/Ruby/Gems/2.0.0katalogu, który nie jest dostępny dla użytkownika i powoduje błąd.

Możesz sprawdzić parametry środowiska Ruby za pomocą polecenia

$ gem env

Istnieje KATALOG INSTALACJI i KATALOG INSTALACJI UŻYTKOWNIKA. Aby użyć katalogu instalacyjnego użytkownika zamiast domyślnego katalogu instalacyjnego, możesz --user-installzamiast tego użyć parametru jako using, sudoktóry nigdy nie jest zalecanym sposobem.

$ gem install myGemName --user-install

W tym procesie nie powinno być już żadnych problemów z prawami. Klejnoty są następnie instalowane w katalogu użytkownika:~/.gem/Ruby/2.0.0/bin

Ale aby udostępnić zainstalowane klejnoty, ten katalog powinien być dostępny na twojej ścieżce. Zgodnie z często zadawanymi pytaniami Ruby , możesz dodać następujący wiersz do swojego ~/.bash_profilelub~/.bashrc

if which ruby >/dev/null && which gem >/dev/null; then
    PATH="$(ruby -rubygems -e 'puts Gem.user_dir')/bin:$PATH"
fi

Następnie zamknij i ponownie załaduj terminal lub ponownie załaduj swój .bash_profilelub .bashrc( . ~/.bash_profile)

Emchateau
źródło
2

Oto rozwiązanie, którego użyłem:

Uwaga: ta poprawka dotyczy kompasu, ponieważ napisałem ją na inne pytanie SO, ale użyłem tego samego procesu do przywrócenia funkcjonalności wszystkich procesów terminalowych, oczywiście instalowane klejnoty są różne, ale proces jest taki sam.

Miałem ten sam problem. Wynika to z wdrożenia przez Apple System Integrity Protection (SIP). Musisz najpierw wyłączyć ...

Uruchom ponownie w trybie odzyskiwania:

Uruchom ponownie i przytrzymaj Command + R, aż zobaczysz logo jabłka.

Po uruchomieniu wybierz Narzędzia> Terminal z górnego paska.

rodzaj: csrutil disable

następnie wpisz: reboot

Po ponownym uruchomieniu

Otwórz terminal ponownie i wprowadź polecenia:

sudo gem uninstall bundler

sudo gem install bundler

sudo gem install compass

sudo gem install sass

sudo gem update --system

Poszczególne klejnoty, które zawiodły, muszą zostać naprawione, więc dla każdego z nich wykonaj następujące czynności:

Na moim komputerze była to pierwsza zależność, która nie działała, więc wymieniłem ją :

sudo gem pristine ffi --version 1.9.3

Przejrzyj listę klejnotów, które wymagają naprawy. W sumie patrzysz na około 10 minut, aby to naprawić, ale będziesz mieć terminalowe polecenia do pracy kompasu.

Zrzut ekranu

jbalesteri
źródło
2

Jeśli klej, który próbujesz zainstalować, wymaga bibliotek xml, spróbuj tego:

sudo gem install -n /usr/local/bin  <gem_name> -- --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib/

W szczególności napotkałem problem podczas instalacji klejnotu nokogiri w wersji 1.6.8 w systemie OS X El Capitan

i to w końcu zadziałało dla mnie:

sudo gem install -n /usr/local/bin  nokogiri -- --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib/

Aby upewnić się, że masz zainstalowane libxml2 i libxslt, możesz:

brew install libxml2 libxslt
brew install libiconv

a następnie sprawdź, czy masz zainstalowane narzędzia wiersza polecenia xcode:

xcode-select --install 

powinien zwrócić ten błąd:

xcode-select: error: command line tools are already installed, use "Software Update" to install updates
Anirban Nandi „Joy”
źródło
1

Ponowna instalacja RVM działała dla mnie, ale później musiałem ponownie zainstalować wszystkie moje klejnoty:

rvm implode
\curl -sSL https://get.rvm.io | bash -s stable --ruby
rvm reload
kkelleey
źródło
0

Napotkałem ten sam problem po zainstalowaniu El Capitan, próbowałem zainstalować sass i kompas w projekcie symfony, następujące polecenie zwróciło następujący błąd:

$ sudo gem install kompas

BŁĄD: Błąd instalacji kompasu: BŁĄD: Nie można zbudować rozszerzenia natywnego gem.

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb 

sprawdzanie ffi.h ... /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/mkmf.rb:434:in `try_do ': Kompilator nie wygenerował Plik wykonywalny. (RuntimeError)

Więc wtedy próbowałem zainstalować sass za pomocą: $ sudo gem install sass

Dostałem ten sam komunikat o błędzie, po pewnym googlowaniu udało mi się zainstalować sass za pomocą następującego polecenia:

$ sudo gem install -n / usr / local / bin sass

Powyższe działało dla mnie przy instalacji sass, ale nie działało przy instalacji kompasu. Przeczytałem, że ktoś gdzieś otworzył instancję xcode, a następnie zamknął ją ponownie, a następnie pomyślnie uruchomił to samo polecenie, po którym zadziałało. Próbowałem otworzyć xcode, ale pojawił się komunikat z informacją, że zainstalowana wersja xcode nie jest kompatybilna z El Capitan. Następnie zaktualizowałem xcode ze sklepu z aplikacjami, ponownie uruchomiłem następujące polecenie, które tym razem zostało pomyślnie uruchomione:

$ sudo gem install -n / usr / local / bin compass

Byłem wtedy w stanie uruchomić $ compass init

Mam teraz wszystkie moje klejnoty i mogę zacząć budować piękne sassowe rzeczy :)

Barry Poore
źródło
0

Musiałem rm -rf ./vendorwtedy bundle installznów biec .

VoA
źródło
-1

Nie lubię instalować rzeczy z sudo. kiedy zaczniesz od sudo, nie możesz przestać ...

spróbuj dać uprawnienia do katalogu Gems.

sudo chown -R $(whoami) /Library/Ruby/Gems/2.0.0
alonn24
źródło
2
Nie zmieniaj własności systemowych klejnotów Ruby. Może to powodować problemy, gdy Mac OS próbuje coś zaktualizować.
Tin Man
-1
sudo chown -R $(whoami):admin /usr/local

To przywróci uprawnienia (Homebrew instaluje tam ruby)

Mirror318
źródło
2
Jeśli uruchomisz to polecenie, a ono zepsuje uprawnienia do danych MySQL, musisz je przywrócić. Oto jak. stillatmylinux.com/not-every-linux-command-is-good-for-you
stillatmylinux