Jak zainstalować klejnot lub zaktualizować RubyGems, jeśli wystąpi błąd uprawnień?

559

Próbuję zainstalować klej za pomocą gem install mygemlub zaktualizować za pomocą RubyGems gem update --system, a ten błąd kończy się niepowodzeniem:

ERROR:  While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

Czy ktoś ma pomysł, jak to rozwiązać?

Gauraw
źródło
5
Oto moje rozwiązanie: stackoverflow.com/questions/34071868/…
LanceP
2
mój błąd wystąpił, ponieważ robię: aktualizacja klejnotów cocoapods poprawna: sudo aktualizacja klejnotów cocoapods
Abhishek Thapliyal
60
sudo chown -R $USER /Library/Ruby/Gems/
vaskort
2
po prostu użycie tego polecenia działało dla mnie: sudo gem install mygem
Jayprakash Dubey
1
używałem powłoki zsh i to był problem ze ścieżką w ~ / .zshrc. użyłem tego wiersza na końcu pliku i zadziałało dla mnie: eksport PATH = "$ HOME / .rbenv / shims: $ PATH"
rosnk

Odpowiedzi:

317

Nie masz uprawnień do zapisu w katalogu /Library/Ruby/Gems/1.8.

oznacza dokładnie to, że nie masz pozwolenia na pisanie w tym miejscu.

To jest wersja Ruby zainstalowana przez Apple na własny użytek. Chociaż można wprowadzić drobne modyfikacje, jeśli wiesz, co robisz , ponieważ nie masz pewności co do problemu z uprawnieniami, powiedziałbym, że nie jest dobrym pomysłem kontynuowanie tej ścieżki.

Zamiast tego zdecydowanie zasugeruję, abyś użył rbenv lub RVM do zarządzania oddzielnym Ruby, zainstalowanym w piaskownicy w twoim katalogu domowym, abyś mógł modyfikować / fold / spindle / change bez obawy o zepsucie systemu Ruby.

Między nimi używam rbenv, chociaż w przeszłości często korzystałem z RVM. rbenv ma bardziej praktyczne podejście do zarządzania instalacją Ruby. RVM ma wiele funkcji i jest bardzo potężny, ale w rezultacie jest bardziej nachalny. W obu przypadkach PRZECZYTAJ dla nich dokumentację instalacyjną kilka razy, zanim zaczniesz instalować cokolwiek wybierzesz.

Blaszany Człowiek
źródło
176
Nie musisz jednak używać osobnej biblioteki Ruby. Wystarczy postawić „sudo” przed sobą, jak sugerował Michael powyżej.
serraosays
37
Zmiana własności instalacji Rubiego przez Apple nie jest dobrym pomysłem, ponieważ System instaluje / aktualizuje, a Narzędzie dyskowe może automatycznie przywrócić / naprawić własność i uprawnienia do katalogu. Sfrustruje to użytkownika i może sfrustrować system operacyjny i kod, który oczekuje, że będzie miał uprawnienia do zapisu / prawa własności do tych katalogów. Apple instaluje aplikacje korzystające z Rubiego i może oczekiwać określonej wersji lub zachowania, więc mogą się zepsuć. Po co męczyć się, gdy łatwiej i bezpieczniej jest korzystać z RVM lub rbenv i nie przejmować się tym.
Tin Man,
203
Dla takich jak ja, którzy tak naprawdę nie robią żadnego dewelopera ruby ​​i nie chcą się bawić przez pół godziny, próbując dowiedzieć się, jakie są te wszystkie kryształowe rzeczy. brew install rubyrozwiąże twoje problemy z zależnością w czysty sposób, który nie wymaga instalacji Apple. Jeśli masz już sudoaktualizację przy pierwszej instalacji i martwisz się tym, co zrobiłeś, powinieneś być w stanie ją cofnąć w następujący sposób:cd /System/Library/Frameworks/Ruby.framework/Versions;sudo rm Current; sudo ln -s 1.8 Current;
Louis
21
I did the sudo tangle and wound up modifying my pre-installed Ruby. I did your steps to try to fix the problem, but now when I do irb or ruby -v, I get command not found. What's going on and is there a fix”, a to tylko zwiększa wagę, dlaczego ludzie nie powinni używać sudolub chown. Westchnienie ....
Tin Man
55
Rozwiązany: na El Captain po wykonaniu brew install rubywystarczy zamknąć Terminal i ponownie go otworzyć.
Fmessina,
420

Spróbuj dodać --user-installzamiast używać sudo:

gem install mygem --user-install
nathanwhy
źródło
4
Nie wiem, dlaczego twoja odpowiedź nie była wcześniej opublikowana. Ta --user-installopcja najwyraźniej istnieje już od jakiegoś czasu. Chciałbym tylko, żebyś to napisał wcześniej. =)
Michael - Where's Clay Shirky
7
To musi iść na górę! Instalowanie przy użyciu sudo lub su jest złym pomysłem, ponieważ wymuszasz system uprawnień na modułach i być może globalnie zainstalowane pakiety mogą kolidować z innymi zainstalowanymi pakietami lub zależnościami innych projektów. Korzystanie z rbenv wymaga zainstalowania innego oprogramowania i dodaje warstwę złożoności.
Hubert Grzeskowiak
7
To działa, ale ostrzega: „OSTRZEŻENIE: Nie masz /Users/<nazwa_użytkownika>/.gem/ruby/2.0.0/bin w ŚCIEŻCE, pliki wykonywalne gem nie będą działać.” Poniższy link zawiera przydatne instrukcje dotyczące aktualizacji ścieżki (bez konieczności korzystania z vi) hathaway.cc/post/69201163472/…
dawid
4
To jest proste i logiczne. Dodaj rubinową ścieżkę, jeśli nie masz w bashrc if which ruby >/dev/null && which gem >/dev/null; then PATH="$(ruby -rubygems -e 'puts Gem.user_dir')/bin:$PATH" fi <br> Źródło: guide.rubygems.org/faqs/#user-install
Inder Kumar Rathore
1
Czy to może zepsuć system Apple (zainstalowany w Ruby)?
Daniel Springer
93

Naprawdę powinieneś używać menedżera wersji Ruby.

Prawidłowe użycie jednego z nich uniemożliwi i może rozwiązać problem z uprawnieniami podczas wykonywania gem updatepolecenia.

Polecam rbenv .

Jednak nawet jeśli używasz menedżera wersji Ruby, nadal możesz otrzymać ten sam komunikat o błędzie.

Jeśli tak, i używasz rbenv, po prostu sprawdź, czy ~/.rbenv/shimskatalog znajduje się przed ścieżką systemowego Ruby.

$ echo $PATH pokaże kolejność ścieżki ładowania.

Jeśli stwierdzisz, że twój katalog shims znajduje się po systemowym katalogu Ruby bin, edytuj ~/.bashrcplik i umieść go jako ostatnią komendę PATH eksportu: export PATH=$HOME/.rbenv/shims:$PATH

$ ruby -v pokazuje, jakiej wersji Ruby używasz

To pokazuje, że obecnie używam systemowej wersji Ruby (zwykle nie jest dobra)

$ ruby -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]

$ rbenv global 1.9.3-p448 przełącza mnie do nowszej, wstępnie zainstalowanej wersji (patrz odnośniki poniżej).

To pokazuje, że używam nowszej wersji Ruby (prawdopodobnie nie spowoduje to Gem :: FilePermissionError)

$ ruby -v
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]

Zwykle nie trzeba poprzedzać polecenia gem w sudo. Jeśli czujesz taką potrzebę, prawdopodobnie coś jest źle skonfigurowane.

Aby uzyskać szczegółowe informacje na temat rbenv, zobacz:

l3x
źródło
7
Jeśli nie korzystasz z przepustki, nie powinieneś sam robić bałaganu rbenv, jeśli postępujesz zgodnie z instrukcjami instalacji Homebrew , wszystko co musisz zrobić, to dodać eval "$(rbenv init -)"do konfiguracji powłoki i rbenvpowinieneś zająć się konfiguracją PATHdla siebie.
Dzięki. Zapomniałem „rbenv global”, więc nadal używałem systemu ruby, a instalacja klejnotów nie udała się.
Graham Perks,
75

Dlaczego nie robisz:

sudo gem update --system
Bobz
źródło
39
Instalowanie klejnotów jako root nie jest dobrym pomysłem. stackoverflow.com/questions/2119064/…
spuder
Miałem problemy z brew upgrade Error: Permission denied.... To naprawiło to. Dzięki!
Ostap Andrusiv,
12
Nigdy nie używaj SUDO, jeśli musisz to zrobić, zrobiłeś coś złego w konfiguracji. Proszę użyć rbenv lub rvm.
Chris Hough,
14
Dlaczego każdy odpowiada na problemy z uprawnieniami, aby zawsze rzucać sudo przed komendą? Jaka jest ta najlepsza praktyka?
Steven,
hyh: qzc.xcodeproj ylgwhyh $ gem install cocoapods BŁĄD: Podczas wykonywania gem ... (Gem :: FilePermissionError) Nie masz uprawnień do zapisu w katalogu /Library/Ruby/Gems/2.0.0.
ylgwhyh
40

To naprawi problem w MacOs Mojave i MacOs Catalina w czysty sposób:

brew install ruby

Następnie ustaw GEM_HOME na swój katalog użytkownika. Na terminalu:

Bash:

echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc
echo 'export GEM_HOME=$HOME/gems' >> ~/.bashrc
echo 'export PATH=$HOME/gems/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

LUB jeśli włączony Zsh:

echo '# Install Ruby Gems to ~/gems' >> ~/.zshrc
echo 'export GEM_HOME=$HOME/gems' >> ~/.zshrc
echo 'export PATH=$HOME/gems/bin:$PATH' >> ~/.zshrc
source ~/.zshrc
Fmessina
źródło
2
jak się tego dowiedziałeś? Pracował!
kuzdu
2
jesteś mężczyzną! piątka, to naprawdę działa jak urok. wielkie dzięki.
mrDinkelman,
1
Nie działało to dla mnie, dopóki nie pobiegłem xcode-select --install. Jest to wymagane do kompilacji rozszerzeń.
Marc Perrin-Pelletier
Uruchomiłem to i chcę móc zresetować wprowadzone przez nich zmiany, czy wiesz, jak to cofnąć? @Fmessina
KarenAnne,
to powinno działać: edytuj plik ~/.bashrclub ~/.zshrcplik, usuń 3 dodane linie, a następnie ponownie uruchom source ~/.bashrckomendę
Fmessina,
34

Dla mnie problem wynikał z używania rbenv i zapominania o ustawianiu odpowiedniej wersji globalnie.

Więc musiałem to ustawić rbenv global xxx

W moim przypadku zainstalowałem, 2.0.0-p247więc musiałem wydać polecenie:

rbenv global 2.0.0-p247
rbenv rehash

Potem wszystko działało dobrze.

Hendrik
źródło
3
Dla tych z was, którzy już używają rbenv i zaczęli otrzymywać błąd uprawnień podczas instalowania klejnotów po aktualizacji OSX do nowszej wersji: Powinieneś zacząć od ustawienia na przykład wersji rbenv, rbenv global 2.1.1a następnie postępuj zgodnie z rbenv rehash. Teraz ponownie uruchom gem installpolecenie.
njappboy,
1
^ To + zrestartuj terminal.
XåpplI'-I0llwlg'I -
1
przyszli odkrywcy: Rbenv rehash został wycofany github.com/rbenv/rbenv-gem-rehash
TCannadySF
Pracował dla mnie idealnie! To rbenv rehashbył brak.
jamesmarkcook
Warto zauważyć, że to systemowy rubin nie posiadałby uprawnień, a rbenv używałby systemowego ruby, gdyby nie został ustawiony globalny ruby. Należy to zweryfikować za pomocą rbenv versions.
Dennis,
23

Musisz poprawić swoje ścieżki.

Aby ustalić, czy ta poprawka zadziała, uruchom następujące polecenie:

which gem

Powinno to wygenerować katalog, do którego nie masz uprawnień:

/usr/bin/gem

Aby to naprawić, wykonaj następujące czynności:

  1. Określ ścieżkę, którą chcesz skopiować do swojego profilu:

    rbenv init -

    Pierwszy wiersz wyniku to wiersz, który należy skopiować do swojego profilu:

    export PATH="/Users/justin/.rbenv/shims:${PATH}" #path that needs to be copied
    source "/usr/local/Cellar/rbenv/0.4.0/libexec/../completions/rbenv.zsh"
    rbenv rehash 2>/dev/null
    rbenv() {
      typeset command
      command="$1"
      if [ "$#" -gt 0 ]; then
        shift
      fi
    
      case "$command" in
      rehash|shell)
        eval `rbenv "sh-$command" "$@"`;;
      *)
        command rbenv "$command" "$@";;
      esac
    }
  2. Skopiuj ścieżkę do swojego profilu i zapisz ją.

  3. Załaduj ponownie swój profil (source ~/.zshenv dla mnie).

  4. Uruchom rbenv rehash.

Teraz po uruchomieniu which gempowinieneś uzyskać ścieżkę lokalną, do której masz uprawnienia:

/Users/justin/.rbenv/shims/gem
Justin Leveck
źródło
To był problem w mojej sytuacji. Powinieneś być w stanie uwzględnić eval "$(rbenv init -)"w swoim ~/.bash_profiledokumencie wszystkie niezbędne zmiany.
nyi
najlepsza odpowiedź. mój profil został nazwany .bash_profile i możesz otworzyć plik w następujący sposób: dotknij ~ / .bash_profile; otwórz ~ / .bash_profile i dodaj wiersz, o którym wspomniałeś w punkcie 1.
CarmenA
17
sudo gem update --system
sudo gem install (gemfile)
Eliot Arntz
źródło
W systemie macOS Mojave sudonie ma uprawnień. haha
DawnSong
17

To zadziałało dla mnie. Ponadto, jeśli wcześniej instalowałeś klejnoty jako root, naprawi to problem, zmieniając własność z powrotem na ciebie (lepiej pod względem bezpieczeństwa).

sudo chown -R `whoami` /Library/Ruby/Gems
thebiggestlebowski
źródło
1
Wielkie NIE! nigdy nie zmieniaj uprawnień do /Libraryfolderu, system może się zepsuć w przyszłych aktualizacjach. (przepraszam za spóźnioną odpowiedź)
Raptor
@Raptor Zmieniam uprawnienia do podfolderu, a nie „/ Library”. W moim przypadku omyłkowo zainstalowałem klejnoty jako root, więc chciałem to cofnąć. Nie ma żadnych negatywnych konsekwencji, o których mogę myśleć teoretycznie, ani też nie zaobserwowałem żadnych. Jestem ciekawy - dlaczego uważasz, że to zły pomysł?
thebiggestlebowski
Ścieżka jest dla systemu. Dalsze aktualizacje systemu macOS mogą ulec uszkodzeniu.
Raptor
Klejnot jest domyślnie instalowany w tej lokalizacji. Nie można go było użyć, ponieważ został przez pomyłkę zainstalowany jako root (sudo) zamiast mojego zwykłego użytkownika. Rezultat tego, co zrobiłem, był taki sam, jakbym najpierw zainstalował jako USER $. Nie widzę krzywdy. Większość innych odpowiedzi tutaj sugeruje ten sam wynik / rozwiązanie, ale różne sposoby jego osiągnięcia. Nadal nie widzę problemu. Czy mówisz, że klejnoty nie powinny być instalowane w / Library?
thebiggestlebowski
15

Istnieją dwie trasy: Użyj rbenv lub RVM. Istnieją przepisy na oba poniżej. Zanim to zrobisz, prawdopodobnie chcesz wyłączyć instalację lokalnych dokumentów dla klejnotów.

echo "gem: --no-ri --no-rdoc" >> ~/.gemrc

Następnie:

install rbenv

install ruby-build

biegać:

rbenv install 2.1.2 (or whatever version you prefer)
rbenv global 2.1.2
gem update --system

Spowoduje to zainstalowanie aktualnej wersji systemu klejnotów w lokalnych katalogach. Oznacza to, że nie ingerujesz w konfigurację systemu. Jeśli zadajesz to pytanie, nie powinieneś zadzierać z bezpieczeństwem systemu i poświęcisz więcej czasu na zrozumienie, na jakie problemy możesz natknąć, niż na łatwy sposób uniknięcia problemu, z którym zacząłeś. Dowiedz się InfoSec później, gdy dowiesz się więcej o systemie operacyjnym i programowaniu.

Alternatywnie użyj zamiast tego „RVM”: Aby zainstalować rvm, uruchom:

rvm install 2.1.2
rvm use 2.1.2
gem update --system

Ma to ten sam rezultat, że kończysz na lokalnym systemie Ruby and Gem, który nie koliduje z wersjami systemu. Nie ma potrzeby używania Homebrew ani nadrzędnych bibliotek systemowych itp.

JezC
źródło
13

Znalazłem ten poradnik za sudomniej klejnotu :

  1. brew install rbenv ruby-build
  2. sudo gem update --system
  3. dodaj eksport do .bashrc:

    export RBENV_ROOT="$(brew --prefix rbenv)"
    export GEM_HOME="$(brew --prefix)/opt/gems"
    export GEM_PATH="$(brew --prefix)/opt/gems"
  4. I wreszcie dodaj to do ~/.gemrc:

    gem: -n/usr/local/bin
  5. gem update --system

gopek
źródło
Użyłem brew install rebenv ruby-build, to jest systempo moim katalogu? Masz pojęcie, co to spowodowało i jak się tego pozbyć system?
7537247
13

Wypróbuj odpowiedź nathanwhy przed użyciem mojej oryginalnej odpowiedzi poniżej. Jego zalecenie --user-installpowinno osiągnąć ten sam cel bez konieczności marszczenia się z tobą .bash_profilelub określania swojej wersji ruby.


Jeśli nie martwisz się o konkretną wersję ruby, możesz pominąć opcje menedżera środowiska Ruby i podnieś te linie ~/.bash_profile:

export GEM_HOME="$HOME/.gem/ruby/2.0.0"
export GEM_PATH="$HOME/.gem/ruby/2.0.0"

Ścieżka została skradziona z oryginalnego wyjścia gem env:

RubyGems Environment:
  - RUBYGEMS VERSION: 2.0.14
  - RUBY VERSION: 2.0.0
  - INSTALLATION DIRECTORY: /Library/Ruby/Gems/2.0.0
  - RUBY EXECUTABLE: /System/Library/.../2.0/usr/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - universal-darwin-14
  - GEM PATHS:
     - /Library/Ruby/Gems/2.0.0
     - /Users/mylogin/.gem/ruby/2.0.0 # <-- This guy, right here.
     - /System/Library/.../usr/lib/ruby/gems/2.0.0
  ...

Nie sudojest wymagane żadne ing i możesz użyć już zainstalowanego rubinu, dzięki uprzejmości Apple.

Michael - Where's Clay Shirky
źródło
3
+1: To zadziałało dla mnie świetnie. Nie każdy jest administratorem systemu używanej maszyny, a zatem nie wszyscy mają dostęp do „sudo”, „chown” lub podobnych narzędzi. Podobnie ludzie powinni zdawać sobie sprawę z „gem install - user-install”, który instaluje gem do katalogu w katalogu osobistym użytkownika, a nie do katalogu współdzielonego przez wszystkich użytkowników.
Some Guy
12

Musiałem to zrobić, rbenv rehashaby wskazywał na moją lokalną bibliotekę Gem.

Wygląda na to, że masz menedżera klejnotów wskazującego na bibliotekę systemową, więc zamiast zadzierać z uprawnieniami, wykonaj odpowiednik „powtórzenia” dla swojego menedżera, aby uzyskać rzeczy wskazujące lokalnie.

Bobbdelsol
źródło
3
przyszli odkrywcy: Rbenv rehash został wycofany github.com/rbenv/rbenv-gem-rehash
TCannadySF
12

Starsze i mądrzejsze

Nie rób tego, co tu mówię, po prostu bądź ostrożny za każdym razem, gdy używasz sudo. Prawdopodobnie chcesz użyć czegoś takiego jak rbenvizolacja jakiejkolwiek pracy, którą wykonujesz.


sposób

uczyć się o chown

Nie wiem, czy podoba Ci się wiersz poleceń, ale sprawi, że praca z każdym projektem za pomocą dowolnego narzędzia instalującego pakiety w twoim systemie będzie dziecinnie prosta.

chown o ile wiem, oznacza zmianę własności.

Powodem, dla którego przyszedłem poszukać tej odpowiedzi, jest to, że gem installrzuciłem dziś na mnie tym błędem:

ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions into the /var/lib/gems/1.9.1 directory.

To idealna okazja do użycia chown . Widzisz, Ruby dała nam katalog, do którego potrzebuje dostępu, i wygląda na to, że jest to katalog, z którego będzie korzystać dość często.

W tym przypadku są tylko trzy rzeczy chown, które musisz wiedzieć, aby rozwiązać problem, ale są one o wiele potężniejsze i zapewniają znacznie większą elastyczność, niż pokażę teraz. Więcej informacji można znaleźć w źródle na dole.

Dwie rzeczy

  1. Nazwa Użytkownika
  2. Informator

Jeśli jesteś w powłoce, znalezienie nazwy użytkownika jest łatwe. Wystarczy spojrzeć na monit. Mój wygląda jak:

breadly@breadly-desktop:~\Desktop

Bieżący użytkownik to tylko nazwa przed @. Znamy katalog z komunikatów o błędach, ale masz dwie możliwości. Możesz albo ograniczyć swoje uprawnienia do bieżącej wersji, używając ../gems/1.9.1, albo dać sobie prawo zapisu dla klejnotów wszystkich wersji, używając ../gems.

Polecenie rzeczywistej zmiany własności wyglądałoby tak.

chown -R $(whoami) /absolute/path/to/directory

-RZnany jest jako flagi i -Rflagi zwykle mówi polecenie coś zrobić rekursywnie, czyli innymi słowy wykonywać polecenia na każdej rzeczy, która znajduje się w katalogu, a wszystkie rzeczy zawarte w katalogach zawartych wewnątrz, i tak dalej aż do nie ma nic więcej.

Rasowo
źródło
Ponadto, jeśli chcesz dowiedzieć się, do której grupy należy użytkownik, możesz to sprawdzić. stackoverflow.com/questions/350141/…
Breedly
3
Możesz jednak zachować ostrożność przy zmianie właściciela, jeśli musi on zostać zainstalowany w katalogu / usr / local / bin.
Breedly,
16
Zmiana własności czegokolwiek w ścieżkach / usr, / Library lub / var jest złym pomysłem. System może zostać zatrzymany z powodu braku dostępu do plików i sterowników, a przyszłe aktualizacje mogą ulec awarii, jeśli instalator wyczuje, że ścieżki nie są już własnością root: wheel. Naprawienie uszkodzeń może być naprawdę trudne i zwykle najlepiej jest to zrobić, instalując ponownie system operacyjny. Naiwni / niedoświadczeni użytkownicy nie wiedzą wystarczająco dużo o systemie operacyjnym, aby zrozumieć, które pliki / katalogi mogą być bezpieczne i należy ich ostrzec, aby nie próbowali tego w domu.
Tin Man
Lol, to żenująca odpowiedź. :) Chyba starsze i mądrzejsze.
Breedly,
11

Sformatowałem komputer Mac i wiele sugerowanych rozwiązań dla mnie nie zadziałało. Dla mnie działały następujące polecenia we właściwej kolejności:

  1. Zainstaluj Homebrew:

    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  2. Zainstaluj Ruby:

    brew install ruby
  3. Zainstaluj kompas:

    sudo gem install compass
Herbi Shtini
źródło
Nigdy nie powinieneś używać sudodo instalowania czegoś z klejnotem. Użycie sudopowoduje zainstalowanie go w systemie Ruby będącym własnością systemu, a nie w systemie, którego jesteś właścicielem. Korzystanie z piaskownicy Ruby jest znacznie łatwiejsze do zarządzania i używania podczas programowania, ponieważ możesz tworzyć wiele różnych instancji i wypróbować różne rzeczy, a następnie zniszczyć je, gdy skończysz.
Tin Man
9

sudo chown -R $USER /Library/Ruby/Gems/

vaskort
źródło
6

Pracuj dla mnie:

sudo gem uninstall cocoapods

sudo gem install cocoapods
evya
źródło
Amazing Pracował dla mnie aswel! Dzięki. Zaoszczędzony wysiłek instalacji rbenv lub RVM
NaXir
5
Oddawanie głosu, ponieważ, jak zauważono w innych komentarzach, instalowanie klejnotów jako root jest niebezpieczną praktyką. Instalator może zrobić dosłownie wszystko w twoim systemie.
Some Guy
@SomeGuy: „Instalator może zrobić dosłownie wszystko” ... bardziej prawdopodobne jest, że sam użytkownik może sfałszować polecenie i zmienić system. Nie mogę sobie wyobrazić, jak instalator zepsuł mój system, ale wyraźnie pamiętam czasy, które zrobiłem. sudoto polecenie, które uwielbiają początkujący, ponieważ pozwala łatwo zrobić coś złego, a nauka posługiwania się nim zajmuje lata.
Tin Man
1
Najlepsza odpowiedź !!!! Po uruchomieniu tych 2 poleceń uruchom ponownie Terminal i to wszystko !!! Wielkie dzięki!!!
nosiciel broni
4

Sprawdź, czy Twoja wersja Ruby jest poprawna. Jeśli nie, zmień to.

To działa dla mnie:

$ rbenv global 1.9.3-p547
$ gem update --system
Zen
źródło
To jest lepsze rozwiązanie: update> chown. Dzięki! . Musiałem także biecbrew install ruby
Jose Llausas
4

Zainstaluj rbenv przez brew install rbenv;

Następnie umieść eval "$(rbenv init -)"na końcu ~ / .bash_profile (lub ~ / .zshrc MacOS);

Otwórz nowy terminal i uruchom gem install ***będzie działać!

zhao
źródło
Nie działało dla mnie ❯ brew install rbenv -q Warning: rbenv 1.1.1 is already installed and up-to-date To reinstall 1.1.1, run `brew reinstall rbenv` ~/.gem/ruby/2.3.0/gems/colorls-1.1.1 ❯ eval "$(rbenv init -)" ~/.gem/ruby/2.3.0/gems/colorls-1.1.1 ❯ gem update Updating installed gems Updating CFPropertyList ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.
Max Coplan,
2

Jak zauważył bobbdelsol, rehash działał dla mnie:

==> which ruby
/usr/bin/ruby

==> rbenv install 1.9.3-p551
Downloading ruby-1.9.3-p551.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p551.tar.bz2
Installing ruby-1.9.3-p551...
Installed ruby-1.9.3-p551 to /Users/username/.rbenv/versions/1.9.3-p551


==> which ruby
/Users/username/.rbenv/shims/ruby

==> which gem
/Users/username/.rbenv/shims/gem

==> gem install compass
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.


==> ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]


==> rbenv global 1.9.3-p551


==> ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]


==> rbenv global 1.9.3-p551


==> rbenv rehash


==> ruby -v
ruby 1.9.3p551 (2014-11-13 revision 48407) [x86_64-darwin15.4.0]


==> gem install compass
Fetching: sass-3.4.22.gem (100%)
Fetching: multi_json-1.11.3.gem (100%)
Fetching: compass-core-1.0.3.gem (100%)
Fetching: compass-import-once-1.0.5.gem (100%)
Fetching: chunky_png-1.3.5.gem (100%)
Fetching: rb-fsevent-0.9.7.gem (100%)
Fetching: ffi-1.9.10.gem (100%)
Building native extensions.  This could take a while...
Fetching: rb-inotify-0.9.7.gem (100%)
Fetching: compass-1.0.3.gem (100%)
    Compass is charityware. If you love it, please donate on our behalf at http://umdf.org/compass Thanks!
Successfully installed sass-3.4.22
Successfully installed multi_json-1.11.3
Successfully installed compass-core-1.0.3
Successfully installed compass-import-once-1.0.5
Successfully installed chunky_png-1.3.5
Successfully installed rb-fsevent-0.9.7
Successfully installed ffi-1.9.10
Successfully installed rb-inotify-0.9.7
Successfully installed compass-1.0.3
9 gems installed
Installing ri documentation for sass-3.4.22...
Installing ri documentation for multi_json-1.11.3...
Installing ri documentation for compass-core-1.0.3...
Installing ri documentation for compass-import-once-1.0.5...
Installing ri documentation for chunky_png-1.3.5...
Installing ri documentation for rb-fsevent-0.9.7...
Installing ri documentation for ffi-1.9.10...
Installing ri documentation for rb-inotify-0.9.7...
Installing ri documentation for compass-1.0.3...
Installing RDoc documentation for sass-3.4.22...
Installing RDoc documentation for multi_json-1.11.3...
Installing RDoc documentation for compass-core-1.0.3...
Installing RDoc documentation for compass-import-once-1.0.5...
Installing RDoc documentation for chunky_png-1.3.5...
Installing RDoc documentation for rb-fsevent-0.9.7...
Installing RDoc documentation for ffi-1.9.10...
Installing RDoc documentation for rb-inotify-0.9.7...
Installing RDoc documentation for compass-1.0.3...
Arunabh Das
źródło
bardzo blisko. jeszcze „BŁĄD: Podczas wykonywania gem ... (Gem :: FilePermissionError) Nie masz uprawnień do zapisu w katalogu /Library/Ruby/Gems/2.0.0.”
JGallardo,
1

Testowane na MacOS Mojave Z SUKCESEM:

  1. Odinstaluj wszystkie stare wersje Ruby (powiedzmy, że masz 2.00 i 2.3.0):

    $ rvm uninstall 2.0.0

    $ rvm uninstall 2.3.0

  2. Zainstaluj nową wersję ruby:

    $ brew install ruby

  3. Ustaw domyślny alias do swojej wersji:

    $ rvm alias create default ruby

  4. Uruchom ponownie system, ponieważ jest to najbezpieczniejszy sposób, w jaki komputer ładuje nową, ostatnio zainstalowaną wersję Ruby.

PO wykonaniu powyższej procedury możesz pomyślnie uruchomić dowolne gempolecenie.

Marcelo Gumiero
źródło
-2

cd /Library/Ruby/Gems/2.0.0

otwarty .

kliknij prawym przyciskiem myszy, aby uzyskać informacje

kliknij blokadę

umieść hasło

spraw, aby wszystko czytało i pisało.

myklgee
źródło
1
Poświęć trochę czasu na sformatowanie odpowiedzi pod kątem czytelności. Wysiłek włożony w badania i wyjaśnianie się opłaca.
Tin Man
-2

daj użytkownikowi $ whoami, aby utworzył coś w tym folderze

sudo chown -R user /Library/Ruby/Gems/2.0.0
Rama Astadipati
źródło
Nie. Ten folder jest własnością systemu z dobrego powodu, system używa go do własnych celów. Można uruchomić skrypt, który na to wskazuje, ale utwórz i użyj piaskownicy Ruby, jeśli chcesz się z tym pograć.
Tin Man
-3

Możesz użyć: gem install cocoapods --pre --user

Alex_Burla
źródło
-4

Instalacja klejnotu lub aktualizacja RubyGems kończy się niepowodzeniem z błędem uprawnień Następnie wpisz to polecenie

sudo gem install cocoapods
Hardip Kalola
źródło
1
Zostało to omówione w innych odpowiedziach. Przeczytaj pozostałe odpowiedzi przed utworzeniem jednej, aby upewnić się, że Twoja oferuje coś nowego.
Tin Man,
-6

Użyłem tego i pracowałem.

$ sudo chown myuser /var/lib/gems

Felipe Francisco
źródło
Zobacz komentarze w innych odpowiedziach dotyczących używania sudo.
Tin Man
-18

Przyczyną błędu jest to, że nie jesteś zalogowany jako użytkownik root na terminalu.

Jeśli masz już uprawnienia roota na swoim komputerze Mac w terminalu

$ su

Jeśli nie masz użytkownika root, musisz go włączyć, wykonując następujące kroki

  1. Z menu Apple wybierz Preferencje systemowe….
  2. Z menu Widok wybierz Użytkownicy i grupy.
  3. Kliknij blokadę i uwierzytelnij się jako konto administratora.
  4. Kliknij Opcje logowania….
  5. Kliknij przycisk „Edytuj…” lub „Dołącz…” w prawym dolnym rogu.
  6. Kliknij przycisk „Open Directory Utility…”.
  7. Kliknij blokadę w oknie Directory Utility.
  8. Wprowadź nazwę konta administratora i hasło, a następnie kliknij OK.
  9. Wybierz opcję Włącz użytkownika root z menu Edycja.
  10. Wprowadź hasło roota, którego chcesz używać w polach Hasło i Weryfikuj, a następnie kliknij OK.

Więcej na ten temat na http://support.apple.com/kb/ht1528

Przynajmniej to działa dla mnie po utknięciu na kilka godzin.

Mohammad Arif
źródło
Dlaczego głosować w dół? Czy możecie napisać powód, aby to zrobić?
Mohammad Arif
8
Instalowanie klejnotów jako root to zły pomysł. stackoverflow.com/questions/2119064/…
spuder