problema de permissão de instalação de gem

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.

O usuário de login atual é qichunren, e o usuário qichunre tem permissão de gravação com .gem dir. Gostaria de saber por que o gem não instala arquivos em meu diretório .gem inicial primeiro? Por que meu gem comum primeiro deseja instalar arquivos em /opt/ruby-enterprise-1.8.7/lib/ruby/gems/1.8

qichunren
fonte

Respostas:

51

Para uma instalação Ruby em todo o sistema, torne-se root. Por exemplo:

$ sudo gem install hpricot

No entanto, a abordagem moderna em muitas circunstâncias, incluindo no desenvolvimento, é usar uma ferramenta que permite instalar e usar Ruby facilmente como um usuário normal. Isso evita que você se torne root. Existem algumas dessas ferramentas, e a que uso é o 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
Yfeldblum
fonte
40
Não use sudo porque você os instalará como root e não terá acesso a eles quando estiver usando seu usuário normal. Use RVM e gemsets.
Ryan,
4
por exemplorvm gem install hpricot
AJP
4
Você pode querer excluir esta resposta. Você manterá os pontos e salvará as pessoas de muitas dores de cabeça.
Olhovsky
172

Tente configurar GEM_HOMEe GEM_PATHpara ~/.gem,

Para a sessão de terminal atual, basta digitar:

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

Se você quiser que eles sejam configurados sempre que abrir um terminal, adicione os comandos acima ao seu ~/.bashrcarquivo.

Para obter uma solução mais abrangente para configurar um ambiente ruby ​​personalizado, consulte este tutorial do Site5KB , que descreve o uso de um .gemrcarquivo.

meagar
fonte
11
Esta é a resposta certa. Não vá empunhar o sudo para instalar coisas se não for necessário.
Jesse O'Brien
O link na resposta parece ter mudado. No entanto, a primeira etapa deste guia realizou a mesma coisa para mim: kb.site5.com/ruby-on-rails/…
Mike S
@MikeSlutsky Obrigado por apontar isso. No futuro, se você encontrar um link quebrado (ou um link que mudou e não é mais relevante), fique à vontade para enviar uma sugestão de "edição" se achar que tem um substituto decente.
meagar
@meagar Atualizei o link fornecido por @Mike-Slutsky, mas notei que é uma documentação para .gemrcconfiguração. Para os novatos em rubi, isso é assustador, quando eu entendo que sua solução é a mais simples que adicionei. A solução funciona para mim, mas como um novato em rubi, confirme se minhas alterações estão de acordo com sua intenção.
David LeBauer
1
Lembre-se de adicionar seu GEM_PATH ao PATH global. Isto é o que eu faço: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
8

Eu estava recebendo este erro no meu servidor compartilhado por meio da hospedagem 1and1. minha solução foi adicionar a --user-installopção, que apenas instala para seu usuário logado (que é tudo que você precisa em um ambiente de servidor compartilhado) exemplo; instalando atrevimento

gem install sass --user-install
Max
fonte
Curiosamente, estou recebendo esse erro, embora tenha especificado --user-install.
sschuberth
4

Se você estiver usando rbenv e isso estiver acontecendo, será necessário adicionar o seguinte ao seu .bash_profile:

export RBENV_ROOT="$HOME/.rbenv"

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

reinstalar o ruby ​​resolver o meu problema.

brew install ruby
jackyshan
fonte