Nie masz uprawnień do zapisu w katalogu /var/lib/gems/2.3.0

104

Mam zainstalowany Ruby na moim Ubuntu 16.04.

$which ruby  

/usr/bin/ruby

$ruby -v 

ruby 2.3.0p0 (2015-12-25) [x86_64-linux-gnu]

$gem install bundler 

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

Każda pomoc będzie mile widziana!

derek
źródło
Możesz spróbować zainstalować RVM i zainstalować nowszą wersję Rubiego, na przykład 2.3.3
Anton Skovorodko
Dla komentarza 3: pakiet "python-software-properties" nie jest dostępny, należy go zastąpić na software-properties-common
Francisco Pedraza
1
Opcja RVM i imho jeszcze lepsza i prosta instalacja jako czysta „instalacja przez użytkownika” (w przeciwieństwie do globalnej, wymagającej praw) może być znacznie lepszą rzeczą niż majstrowanie przy prawach!
Frank Nocke
8
Chciałbym, żeby ten strumień wyjaśnił, dlaczego ten OP miał ten problem i dlaczego powinni porzucić wersję Ruby na rzecz zarówno Rubiego, jak i menedżera instalacji wielokrotnej (RVM lub RBEVN). Nie jestem w stanie stwierdzić z całą pewnością, czy podane tu rady są oparte wyłącznie na osobistych preferencjach. Mam nadzieję, że za tą radą kryje się coś więcej.
BaldEagle

Odpowiedzi:

154

Najpierw musisz odinstalować ruby ​​zainstalowane przez Ubuntu za pomocą czegoś takiego sudo apt-get remove ruby.

Następnie zainstaluj ponownie Ruby używając rbenv i ruby-build zgodnie z ich dokumentacją:

cd $HOME
sudo apt-get update 
sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL

git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
exec $SHELL

rbenv install 2.3.1
rbenv global 2.3.1
ruby -v

Ostatnim krokiem jest instalacja Bundlera:

gem install bundler
rbenv rehash

Następnie ciesz się!

Derek

derek
źródło
8
Instrukcja montażu rubinu (na szynach) jest tutaj: gorails.com/setup/ubuntu/16.04
Andrzej Rehmann
5
Jestem trochę niechętny do odinstalowania, ponieważ wymaga to również odinstalowania programów zależnych ( vim-gnomena przykład). Chyba wolałbym wiedzieć, dlaczego w pierwszej kolejności musi pisać w /var/lib/...przypadku instalacji użytkownika ... Czy zrobiłem, sudo gem installgdy nie był potrzebny?
PlasmaBinturong
4
Zgadzam się z @AntonSkovorodko, byłoby miło, gdyby odpowiedź mogła uzasadnić odinstalowanie Rubiego
blong
4
Tylko bądź ostrożny podczas odinstalowywania Rubiego w środowisku Cinnamon (miało to miejsce w Linux Mint 18.2), po restarcie nie mogłem uruchomić systemu w trybie graficznym. Kiedy tak się stanie, przejdź do CLI przez Ctrl+Alt+F1i uruchom następujące polecenia (odinstalowuje i ponownie instaluje Cinnamon): sudo apt purge cinnamon && sudo apt install cinnamon
Kout
2
gdy ta odpowiedź się starzeje, prawdopodobnie będziesz chciał wiedzieć, jakie są najnowsze dostępne: rbenv install -laby wyświetlić listę wszystkich dostępnych wersji, a następnie rbenv install 2.5.1dla wersji 2.5.1 lub cokolwiek chcesz.
Paul Sturm,
60

Jeśli chcesz używać dystrybucji Ruby zamiast rb-env / rvm, możesz ustawić GEM_HOMEdla bieżącego użytkownika. Zacznij od utworzenia katalogu do przechowywania klejnotów Ruby dla twojego użytkownika:

$ mkdir ~/.ruby

Następnie zaktualizuj powłokę, aby używała tego katalogu dla GEM_HOMEi zaktualizuj PATHzmienną, aby zawierała katalog bin Ruby gem.

$ echo 'export GEM_HOME=~/.ruby/' >> ~/.bashrc
$ echo 'export PATH="$PATH:~/.ruby/bin"' >> ~/.bashrc
$ source ~/.bashrc

(Ta ostatnia linia przeładuje zmienne środowiskowe w bieżącej powłoce).

Teraz powinieneś być w stanie zainstalować klejnoty Ruby pod swoim użytkownikiem za pomocą gempolecenia. Udało mi się to uruchomić z Ruby 2.5.1 pod Ubuntu 18.04. Jeśli używasz powłoki, która nie jest Bash, będziesz musiał edytować skrypt startowy dla tej powłoki zamiast bashrc.

James
źródło
2
Zrobiłem to, po czym wyskoczył błąd „nie mogę znaleźć plików nagłówkowych dla ruby”, po czym przeczytałem to: stackoverflow.com/a/4502672/2245874 i nie podążyłem za tym wszystkim, ale wykonałem sudo apt install ruby -gems, a potem zadziałało dla mnie.
robm
1
Myślę, że @robm oznaczało ruby-dev, a nie ruby-gems
Altreus
3
Jest to prawdopodobnie bardziej odpowiednie dla użytkowników Rubiego, którzy nie muszą programować na wielu wersjach.
danielcooperxyz
1
Opisałeś naprawdę dobry linuksowy sposób na naprawienie mojej instalacji ruby ​​bez żadnych dodatkowych narzędzi, po prostu stary dobry bash :)
Denis Trofimov
30

(Styczeń 2019) Aby zainstalować Rubiego za pomocą skryptu Rbenv, wykonaj następujące kroki:

1. Najpierw zaktualizuj indeks pakietów i zainstaluj pakiety wymagane przez narzędzie do budowania Ruby do zbudowania Rubiego ze źródła:

sudo apt-get remove ruby
sudo apt update
sudo apt install git curl libssl-dev libreadline-dev zlib1g-dev autoconf bison build-essential libyaml-dev libreadline-dev libncurses5-dev libffi-dev libgdbm-dev

2. Następnie uruchom następującą komendę curl, aby zainstalować zarówno rbenv, jak i ruby-build:

curl -sL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bash -

3. Dodaj $ HOME / .rbenv / bin do ŚCIEŻKI systemowej.

Jeśli używasz Bash, uruchom:

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc

Jeśli używasz Zsh Run:

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(rbenv init -)"' >> ~/.zshrc
source ~/.zshrc

4. Zainstaluj najnowszą stabilną wersję Rubiego i ustaw ją jako wersję domyślną za pomocą:

rbenv install 2.5.1
rbenv global 2.5.1

Aby wyświetlić listę wszystkich dostępnych wersji Rubiego, których możesz użyć: rbenv install -l

5. Sprawdź, czy Ruby został poprawnie zainstalowany, drukując numer wersji:

ruby -v

# Output
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]

ŹRÓDŁO: Jak zainstalować Ruby na Ubuntu 18.04

EDYCJA: Zainstaluj rubygems:

sudo apt-get install rubygems
Achraf JEDAY
źródło
2
to jest świetne! miły i zwięzły. Śledziłem go dokładnie (z wyjątkiem .zshrczmian, które wprowadziłem ręcznie) i działało idealnie. W ten sam sposób dodaje się, jak zainstalować rubygems, sugeruję być może dodając jak później zaktualizować zainstalowaną wersję rubinowy (zgaduję po prostu uruchomić rbenv installi rbenv globalpoleceń ponownie i może rbenv uninstallprzycinać nieaktualne wersje)
gMale
1
To jest niesamowite! Działa doskonale na Ubuntu 18.04 WSL.
robe007
1
To jest bardziej elegancka odpowiedź.
rashedcs
14

Zamiast zmieniać właścicieli, co może zablokować innych lokalnych użytkowników lub - pewnego dnia - Twój własny serwer Ruby / rzeczy wdrożeniowe ... działające pod innym użytkownikiem ...

Wolałbym po prostu rozszerzyć prawa do tego konkretnego folderu na ... cóż, wszystkich:

cd /var/lib
sudo chmod -R a+w gems/

(Wystąpił również Twój błąd. Jest to więc dość sprawdzone).

Frank Nocke
źródło
1
Musiałem również zaadresować folder / usr / local / bin, ale to rozwiązanie zadziałało: „BŁĄD: Podczas wykonywania gem ... (Gem :: FilePermissionError) Nie masz uprawnień do zapisu w katalogu / usr / local / bin . ”
eb80
10

Spróbuj użyć chown -Rw var/lib/gemskatalogu, przypisując prawo własności do użytkownika [ rubyusername] w tym przykładzie, użytkownika, który będzie instalował i rozwijał za pomocą klejnotów.

 # chown -R rubyusername:rubyusername /var/lib/gems 

To rekurencyjnie zmienia wszystko w katalogu gems . Aby zapewnić dodatkowe bezpieczeństwo w systemach z wieloma użytkownikami, możesz również utworzyć grupę, zamiast wymieniać indywidualną nazwę użytkownika ruby ​​i dodawać użytkowników do tej grupy.

rybka
źródło
2
Może rozwiązać ten problem, ale pojawia się inny problem: BŁĄD: Podczas wykonywania programu gem ... (Gem :: FilePermissionError) Nie masz uprawnień do zapisu w katalogu / usr / local / bin; więc myślę, że coś innego jest nie tak zamiast pozwolenia.
derek
3

Opierając się na powyższej odpowiedzi dereka, generalnie nie zaleca się używania dostarczonej przez system instancji Rubiego do własnych prac programistycznych, ponieważ narzędzia systemowe mogą zależeć od konkretnej wersji lub lokalizacji instalacji Rubiego. Podobnie jak w przypadku tej odpowiedzi dla Mac OSX , będziesz chciał postępować zgodnie z instrukcjami dereka dotyczącymi używania czegoś takiego jak rbenv ( RVM jest podobną alternatywą) do zainstalowania własnej instancji Ruby.

Jednak nie ma potrzeby odinstalowywania systemowej wersji Rubiego, instrukcje instalacji rbenv zapewniają mechanizm zapewniający, że instancja Rubiego dostępna w Twojej powłoce jest instancją rbenv, a nie instancją systemową. To jest

echo 'eval "$(rbenv init -)"' >> ~/.bashrc

linia w odpowiedzi Dereka.

Sean Ray
źródło
2

Napotkałem ten sam błąd w akcjach GitHub. Dodanie sudorozwiązało problem.

sudo gem install bundler
Kolappan N
źródło
0

Ponowna instalacja Compass zadziałała dla mnie… To magia!

sudo gem install -n /usr/local/bin compass
Haje
źródło
0

Ubuntu 20.04:

Opcja 1 - skonfiguruj katalog instalacyjny gem dla swojego konta użytkownika

Dla bash (dla zsh użylibyśmy .zshrcoczywiście)

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

Opcja 2 - użyj przystawki

Odinstaluj apt-version ( ruby-full) i zainstaluj go ponownie zsnap

sudo apt-get remove ruby
sudo snap install ruby --classic
schnatterer
źródło