problem z uprawnieniami do instalacji klejnotów


90
qichunren@zhaobak:~> gem install hpricot
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions into the /opt/ruby-enterprise-1.8.7/lib/ruby/gems/1.8 directory.

Bieżący użytkownik logowania to qichunren, a użytkownik qichunre ma uprawnienia do zapisu w katalogu .gem Chciałbym wiedzieć, dlaczego gem nie instaluje najpierw plików w moim katalogu domowym .gem? Dlaczego mój wspólny gem najpierw chce zainstalować pliki w /opt/ruby-enterprise-1.8.7/lib/ruby/gems/1.8

Odpowiedzi:


52

Aby przeprowadzić instalację Rubiego w całym systemie, uzyskaj uprawnienia roota. Na przykład:

$ sudo gem install hpricot

Jednak nowoczesne podejście w wielu okolicznościach, w tym w fazie rozwoju, polega na użyciu narzędzia, które pozwala łatwo zainstalować i używać Rubiego jako zwykły użytkownik. Pozwala to uniknąć konieczności uzyskiwania uprawnień roota. Jest kilka takich narzędzi, a tym, którego używam, jest RVM .

# install rvm into your ~
$ \curl -sSL https://get.rvm.io | bash -s stable

# install latest version of ruby into your ~
$ rvm install ruby

# installs a gem into your ~
$ gem install $SOME_GEM_NAME

41
Nie używaj sudo, ponieważ zainstalujesz je jako root i nie będziesz mieć do nich dostępu, gdy używasz zwykłego użytkownika. Użyj RVM i gemsetów.
Ryan

4
np.rvm gem install hpricot
AJP

4
Możesz chcieć usunąć tę odpowiedź. Zachowasz punkty i zaoszczędzisz ludziom wiele bólu głowy.
Olhovsky

174

Spróbuj ustawić GEM_HOMEi GEM_PATHdo ~/.gem,

Dla bieżącej sesji terminala wystarczy wpisać:

export GEM_HOME=~/.gem
export GEM_PATH=~/.gem

Jeśli chcesz, aby były one ustawiane za każdym razem, gdy otwierasz terminal, dodaj powyższe polecenia do swojego ~/.bashrcpliku.

Bardziej kompleksowe rozwiązanie dotyczące konfigurowania niestandardowego środowiska Ruby można znaleźć w tym samouczku z witryny Site5KB , w którym opisano używanie .gemrcpliku.


11
To jest właściwa odpowiedź. Nie używaj sudo instalując rzeczy, jeśli nie musisz.
Jesse O'Brien

Wydaje się, że łącze w odpowiedzi uległo zmianie. Pierwszy krok z tego przewodnika przyniósł
Mike S

@MikeSlutsky Dzięki za wskazanie tego. W przyszłości, jeśli znajdziesz uszkodzony link (lub link, który zmienił się i nie jest już aktualny), możesz przesłać sugestię „edycji”, jeśli uważasz, że masz przyzwoity zamiennik.
meagar

@meagar Zaktualizowałem link podany przez @ Mike-Slutsky, ale zauważyłem, że jest to dokumentacja do .gemrckonfiguracji. Dla nowicjuszy z rubinem jest to zniechęcające, kiedy rozumiem, że twoje rozwiązanie jest znacznie prostsze, które dodałem. To rozwiązanie działa dla mnie, ale jako nowicjusz w Ruby proszę potwierdzić, że moje zmiany są zgodne z twoimi intencjami.
David LeBauer

1
Pamiętaj, aby dodać swoją GEM_PATH do globalnej PATH. Oto, co robię:PATH=$HOME/.gems/bin:$HOME/bin:$PATH GEM_HOME=$HOME/.gems GEM_PATH=$HOME/.gems:/var/lib/gems/2.1.0:/usr/lib/ruby/gems/2.1.0 export PATH GEM_HOME GEM_PATH
Spone

10

Otrzymałem ten błąd na moim serwerze współdzielonym przez hosting 1and1. moim rozwiązaniem było dodanie --user-installopcji, która po prostu instaluje ją dla zalogowanego użytkownika (co jest wszystkim, czego potrzebujesz w środowisku serwera współdzielonego); instalowanie sass

gem install sass --user-install

Co ciekawe, dostaję ten błąd choć nie podano --user-install.
sschuberth

4

Jeśli używasz rbenv i tak się dzieje, musisz dodać następujące elementy do swojego .bash_profile:

export RBENV_ROOT="$HOME/.rbenv"

if [ -d $RBENV_ROOT ]; then
  export PATH="$RBENV_ROOT/bin:$PATH"
  eval "$(rbenv init -)"
fi

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.