Você não tem permissões de gravação para o diretório /var/lib/gems/2.3.0

104

Eu tenho o Ruby instalado no meu 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.

Qualquer ajuda será muito apreciada!

derek
fonte
Você pode tentar instalar o RVM e instalar uma versão mais recente do ruby ​​como 2.3.3
Anton Skovorodko
Para o comentário 3: o pacote "python-software-properties" não está disponível, você deve substituir por software-properties-common
Francisco Pedraza
1
A opção RVM e, em vez disso, a instalação ainda melhor e simples como uma "instalação pelo usuário" pura (em oposição a uma instalação global que exige direitos) pode ser uma coisa muito melhor do que mexer nos direitos!
Frank Nocke
8
Eu gostaria que este fluxo explicasse porque este OP teve este problema e porque eles deveriam abandonar uma versão do Ruby em favor do Ruby e de um gerenciador de instalação múltipla (RVM ou RBEVN). Não posso dizer com certeza se o conselho aqui se baseia apenas em preferências pessoais. Espero que haja mais por trás deste conselho.
BaldEagle

Respostas:

153

Você primeiro precisa desinstalar o ruby ​​instalado pelo Ubuntu com algo parecido sudo apt-get remove ruby.

Em seguida, reinstale o ruby ​​usando rbenv e ruby-build de acordo com seus documentos:

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

A última etapa é instalar o Bundler:

gem install bundler
rbenv rehash

Então aproveite!

Derek

derek
fonte
8
A instrução sobre como instalar o Ruby (on rails) está aqui gorails.com/setup/ubuntu/16.04
Andrzej Rehmann
5
Eu sou meio reticente em fazer a desinstalação, já que requer a desinstalação de programas dependentes também ( vim-gnomepor exemplo). Eu acho que preferiria saber por que em primeiro lugar ele precisa escrever /var/lib/...para uma instalação do usuário ... Eu fiz um sudo gem installquando não necessário?
PlasmaBinturong de
4
Eu concordo com @AntonSkovorodko, seria bom se a resposta pudesse justificar a desinstalação do Ruby
blong
4
Só tome cuidado ao desinstalar o Ruby no ambiente Cinnamon (acontecia no Linux Mint 18.2), após o reboot não consegui rodar o sistema em modo gráfico. Quando isso acontecer com você, vá para a CLI via Ctrl+Alt+F1e execute os seguintes comandos (desinstala e instala o Cinnamon novamente): sudo apt purge cinnamon && sudo apt install cinnamon
Kout
2
conforme essa resposta envelhece, você provavelmente vai querer saber quais são as últimas disponíveis: rbenv install -lpara obter uma lista de todas as versões disponíveis, rbenv install 2.5.1em seguida, para a versão 2.5.1 ou o que quiser.
Paul Sturm
60

Se você quiser usar a distribuição Ruby em vez de rb-env / rvm, você pode configurar um GEM_HOMEpara o usuário atual. Comece criando um diretório para armazenar as joias Ruby para seu usuário:

$ mkdir ~/.ruby

Em seguida, atualize seu shell para usar esse diretório GEM_HOMEe para atualizar sua PATHvariável para incluir o diretório bin Ruby gem.

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

(A última linha recarregará as variáveis ​​de ambiente em seu shell atual.)

Agora você deve conseguir instalar as gemas Ruby sob o seu usuário usando o gemcomando. Consegui fazer isso funcionar com Ruby 2.5.1 no Ubuntu 18.04. Se estiver usando um shell que não seja Bash, você precisará editar o script de inicialização para esse shell em vez de bashrc.

James
fonte
2
Eu fiz isso, em seguida, recebi um erro sobre "não consigo encontrar arquivos de cabeçalho para ruby", então li isto: stackoverflow.com/a/4502672/2245874 , e não segui tudo isso, mas fiz sudo para instalar ruby -gems, e então funcionou para mim.
robm
1
Eu acredito que @robm significava ruby-dev, não ruby-gems
Altreus
3
Isso provavelmente é mais apropriado para usuários de ruby ​​que não precisam desenvolver em várias versões.
danielcooperxyz
1
Você descreveu uma maneira realmente boa do Linux de consertar minha instalação do Ruby sem nenhuma ferramenta adicional, apenas a boa e velha festa :)
Denis Trofimov
30

(Janeiro de 2019) Para instalar o Ruby usando o script Rbenv, siga estas etapas:

1. Primeiro, atualize o índice de pacotes e instale os pacotes necessários para a ferramenta ruby-build para construir Ruby a partir da fonte:

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. Em seguida, execute o seguinte comando curl para instalar rbenv e ruby-build:

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

3. Adicione $ HOME / .rbenv / bin ao PATH do sistema.

Se você estiver usando o Bash, execute:

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

Se você estiver usando Zsh, execute:

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

4. Instale a versão estável mais recente do Ruby e defina-a como uma versão padrão com:

rbenv install 2.5.1
rbenv global 2.5.1

Para listar todas as versões de Ruby disponíveis, você pode usar: rbenv install -l

5. Verifique se o Ruby foi instalado corretamente imprimindo o número da versão:

ruby -v

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

FONTE: Como instalar Ruby no Ubuntu 18.04

EDIT: Instale rubygems:

sudo apt-get install rubygems
Achraf JEDAY
fonte
2
isso é ótimo! bom e sucinto. Eu segui exatamente (exceto as .zshrcmudanças que fiz à mão) e funcionou perfeitamente. Da mesma forma que você adicionou como instalar rubygems, eu sugiro talvez adicionando como atualizar mais tarde a versão rubi instalado (eu estou supondo que você acabou de executar os rbenv installe rbenv globalcomandos novamente e talvez rbenv uninstallpodar versões desatualizadas)
gMale
1
Isso é incrível! Funciona perfeitamente no Ubuntu 18.04 WSL.
robe007 01 de
1
Esta é uma resposta mais elegante.
rashedcs
14

Em vez de mudar de proprietário, o que pode bloquear outros usuários locais, ou –algum dia– seu próprio servidor ruby ​​/ itens de implantação ... rodando sob um usuário diferente ...

Eu prefiro simplesmente estender os direitos dessa pasta específica para ... bem, todos:

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

(Eu também encontrei seu erro. Portanto, isso é razoavelmente verificado.)

Frank Nocke
fonte
1
Eu também precisava endereçar a pasta / usr / local / bin, mas esta solução funcionou: "ERROR: While executando gem ... (Gem :: FilePermissionError) Você não tem permissões de gravação para o diretório / usr / local / bin . "
eb80
10

Tente usar chown -Rno var/lib/gemsdiretório, atribuindo propriedade ao usuário [ rubyusername] neste exemplo, o usuário que irá instalar e desenvolver com gems.

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

Isso muda recursivamente tudo no diretório gems . Para segurança extra em sistemas multiusuário, você também pode criar um grupo, em vez de aplicar o chown no rubyusername individual, e adicionar usuários a esse grupo.

peixinho
fonte
2
Ele pode resolver esse problema, mas outro problema surge: ERROR: While executando gem ... (Gem :: FilePermissionError) Você não tem permissões de gravação para o diretório / usr / local / bin; então acho que algo está errado em vez da permissão.
derek
3

Com base na resposta de derek acima, geralmente não é recomendado usar a instância Ruby fornecida pelo sistema para seu próprio trabalho de desenvolvimento, já que as ferramentas do sistema podem depender da versão ou localização específica da instalação do Ruby. Semelhante a esta resposta para Mac OSX , você desejará seguir as instruções de derek sobre como usar algo como rbenv ( RVM é uma alternativa semelhante) para instalar sua própria instância Ruby.

No entanto, não há necessidade de desinstalar a versão do sistema do Ruby, as instruções de instalação do rbenv fornecem um mecanismo para garantir que a instância do Ruby disponível em seu shell seja a instância do rbenv, não a instância do sistema. Isto é o

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

linha na resposta de derek.

Sean Ray
fonte
2

Encontrei o mesmo erro nas Ações do GitHub. Adicionar sudoresolveu o problema.

sudo gem install bundler
Kolappan N
fonte
0

Reinstalar o Compass funcionou para mim .. É uma mágica!

sudo gem install -n /usr/local/bin compass
Haje
fonte
0

Ubuntu 20.04:

Opção 1 - configurar um diretório de instalação gem para sua conta de usuário

Para bash (para zsh, usaríamos, é .zshrcclaro)

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

Opção 2 - usar snap

Desinstale o apt-version ( ruby-full) e reinstale-o comsnap

sudo apt-get remove ruby
sudo snap install ruby --classic
schnatterer
fonte