Próbuję zainstalować klej za pomocą gem install mygem
lub 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ć?
sudo chown -R $USER /Library/Ruby/Gems/
Odpowiedzi:
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.
źródło
brew install ruby
rozwiąże twoje problemy z zależnością w czysty sposób, który nie wymaga instalacji Apple. Jeśli masz jużsudo
aktualizację 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;
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ćsudo
lubchown
. Westchnienie ....brew install ruby
wystarczy zamknąć Terminal i ponownie go otworzyć.Spróbuj dodać
--user-install
zamiast używaćsudo
:źródło
--user-install
opcja najwyraźniej istnieje już od jakiegoś czasu. Chciałbym tylko, żebyś to napisał wcześniej. =)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-installNaprawdę 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 update
polecenia.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/shims
katalog 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
~/.bashrc
plik i umieść go jako ostatnią komendę PATH eksportu:export PATH=$HOME/.rbenv/shims:$PATH
$ ruby -v
pokazuje, jakiej wersji Ruby używaszTo pokazuje, że obecnie używam systemowej wersji Ruby (zwykle nie jest dobra)
$ 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)
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:
źródło
rbenv
, jeśli postępujesz zgodnie z instrukcjami instalacji Homebrew , wszystko co musisz zrobić, to dodaćeval "$(rbenv init -)"
do konfiguracji powłoki irbenv
powinieneś zająć się konfiguracjąPATH
dla siebie.Dlaczego nie robisz:
źródło
brew upgrade
Error: Permission denied...
. To naprawiło to. Dzięki!To naprawi problem w MacOs Mojave i MacOs Catalina w czysty sposób:
Następnie ustaw GEM_HOME na swój katalog użytkownika. Na terminalu:
Bash
:LUB jeśli włączony
Zsh
:źródło
xcode-select --install
. Jest to wymagane do kompilacji rozszerzeń.~/.bashrc
lub~/.zshrc
plik, usuń 3 dodane linie, a następnie ponownie uruchomsource ~/.bashrc
komendę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-p247
więc musiałem wydać polecenie:Potem wszystko działało dobrze.
źródło
rbenv global 2.1.1
a następnie postępuj zgodnie zrbenv rehash
. Teraz ponownie uruchomgem install
polecenie.rbenv rehash
był brak.rbenv versions
.Musisz poprawić swoje ścieżki.
Aby ustalić, czy ta poprawka zadziała, uruchom następujące polecenie:
Powinno to wygenerować katalog, do którego nie masz uprawnień:
Aby to naprawić, wykonaj następujące czynności:
Określ ścieżkę, którą chcesz skopiować do swojego profilu:
Pierwszy wiersz wyniku to wiersz, który należy skopiować do swojego profilu:
Skopiuj ścieżkę do swojego profilu i zapisz ją.
Załaduj ponownie swój profil (
source ~/.zshenv
dla mnie).Uruchom
rbenv rehash
.Teraz po uruchomieniu
which gem
powinieneś uzyskać ścieżkę lokalną, do której masz uprawnienia:źródło
eval "$(rbenv init -)"
w swoim~/.bash_profile
dokumencie wszystkie niezbędne zmiany.źródło
sudo
nie ma uprawnień. hahaTo 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).
źródło
/Library
folderu, system może się zepsuć w przyszłych aktualizacjach. (przepraszam za spóźnioną odpowiedź)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.
Następnie:
install rbenv
install ruby-build
biegać:
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:
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.
źródło
Znalazłem ten poradnik za
sudo
mniej klejnotu :brew install rbenv ruby-build
sudo gem update --system
dodaj eksport do
.bashrc
:I wreszcie dodaj to do
~/.gemrc
:gem update --system
źródło
brew install rebenv ruby-build
, to jestsystem
po moim katalogu? Masz pojęcie, co to spowodowało i jak się tego pozbyćsystem
?Wypróbuj odpowiedź nathanwhy przed użyciem mojej oryginalnej odpowiedzi poniżej. Jego zalecenie
--user-install
powinno osiągnąć ten sam cel bez konieczności marszczenia się z tobą.bash_profile
lub 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
:Ścieżka została skradziona z oryginalnego wyjścia
gem env
:Nie
sudo
jest wymagane żadne ing i możesz użyć już zainstalowanego rubinu, dzięki uprzejmości Apple.źródło
Musiałem to zrobić,
rbenv rehash
aby 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.
źródło
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 jakrbenv
izolacja 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 install
rzuciłem dziś na mnie tym błędem: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
Jeśli jesteś w powłoce, znalezienie nazwy użytkownika jest łatwe. Wystarczy spojrzeć na monit. Mój wygląda jak:
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.
-R
Znany jest jako flagi i-R
flagi 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.źródło
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:
Zainstaluj Homebrew:
Zainstaluj Ruby:
Zainstaluj kompas:
źródło
sudo
do instalowania czegoś z klejnotem. Użyciesudo
powoduje 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.sudo chown -R $USER /Library/Ruby/Gems/
źródło
Pracuj dla mnie:
źródło
sudo
to polecenie, które uwielbiają początkujący, ponieważ pozwala łatwo zrobić coś złego, a nauka posługiwania się nim zajmuje lata.Sprawdź, czy Twoja wersja Ruby jest poprawna. Jeśli nie, zmień to.
To działa dla mnie:
źródło
update
>chown
. Dzięki! . Musiałem także biecbrew install ruby
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ć!źródło
❯ 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.
Jak zauważył bobbdelsol, rehash działał dla mnie:
źródło
Testowane na MacOS Mojave Z SUKCESEM:
Odinstaluj wszystkie stare wersje Ruby (powiedzmy, że masz 2.00 i 2.3.0):
$ rvm uninstall 2.0.0
$ rvm uninstall 2.3.0
Zainstaluj nową wersję ruby:
$ brew install ruby
Ustaw domyślny alias do swojej wersji:
$ rvm alias create default ruby
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
gem
polecenie.źródło
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.
źródło
daj użytkownikowi $ whoami, aby utworzył coś w tym folderze
źródło
Możesz użyć: gem install cocoapods --pre --user
źródło
Instalacja klejnotu lub aktualizacja RubyGems kończy się niepowodzeniem z błędem uprawnień Następnie wpisz to polecenie
źródło
Użyłem tego i pracowałem.
$ sudo chown myuser /var/lib/gems
źródło
sudo
.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
Jeśli nie masz użytkownika root, musisz go włączyć, wykonując następujące kroki
Więcej na ten temat na http://support.apple.com/kb/ht1528
Przynajmniej to działa dla mnie po utknięciu na kilka godzin.
źródło