Não é possível instalar gemas no OS X "El Capitan"

182

Não consigo instalar e executar o fakes3gem no El Capitan Beta 5.

Eu tentei:

sudo gem install fakes3
ERROR:  While executing gem ... (Errno::EPERM)
    Operation not permitted - /usr/bin/fakes3

Então eu tentei fazer isso da maneira dos cocoapods. Funcionou para cocoapods, mas não para falsificações3.

mkdir -p $HOME/Software/ruby
export GEM_HOME=$HOME/Software/ruby
gem install cocoapods
[...]
1 gem installed
gem install fakes3
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
Himanshu Yadav
fonte
3
Não use sudopara instalar o Ruby ou alterar gemas. Em vez disso, use rbenv ou RVM para instalar e gerenciar Ruby. Leia e siga as instruções nos respectivos sites. E, em qualquer um dos casos, após a instalação, não use, a sudomenos que você entenda o que está mudando e por que deseja fazê-lo.
the Tin Man

Respostas:

333

Isenção de responsabilidade: o @theTinMan e outros desenvolvedores do Ruby geralmente apontam para não usar sudona instalação de gemas e apontam para coisas como RVM . Isso é absolutamente verdade ao desenvolver o Ruby. Vá em frente e use isso.

No entanto, muitos de nós apenas quer um pouco de binário que acontece a ser distribuído como uma jóia (por exemplo fakes3, cocoapods, xcpretty...). Definitivamente, não quero me preocupar em gerenciar um rubi separado. Aqui estão suas opções mais rápidas:

Opção 1: Continue usando o sudo

O uso sudoprovavelmente é bom se você deseja que essas ferramentas sejam instaladas globalmente.

O problema é que esses binários estão instalados /usr/bin, o que é proibido desde El Capitan. No entanto, você pode instalá-los no /usr/local/binlugar. É aí que a Homebrew instala suas coisas, então provavelmente já existe.

sudo gem install fakes3 -n/usr/local/bin

O Gems será instalado /usr/local/bine todos os usuários do seu sistema poderão usá-los se estiverem no PATH .

Opção 2: instalar no seu diretório pessoal (sem sudo)

O seguinte irá instalar gemas ~/.geme colocar binários ~/bin(que você deve adicionar ao seu PATH).

gem install fakes3 --user-install -n~/bin

Torne o padrão

De qualquer forma, você pode adicionar esses parâmetros aos seus ~/.gemrcpara não precisar se lembrar deles:

gem: -n/usr/local/bin

ie echo "gem: -n/usr/local/bin" >> ~/.gemrc

ou

gem: --user-install -n~/bin

ie echo "gem: --user-install -n~/bin" >> ~/.gemrc

( Dica: você também pode --no-documentpular para gerar a documentação do desenvolvedor Ruby.)

nschum
fonte
Muito obrigado! Eu lutei com novas versões do brew e ruby, mas ainda não consegui passar no problema / usr / bin. A especificação do caminho desejado durante a execução gem installresolveu o problema.
21815 Daniel Saidi
O .gemrcdeve ter gem: -n /usr/local/bin(precisa de um espaço após -n).
Paul Schreiber
@PaulSchreiber Bem, eu tenho usado sem espaço há cinco meses. :) Você tem certeza?
Nschum
2
Mais 1 para a opção 2, que é uma alternativa viável e segura se você deseja apenas os binários sem um Ruby separado. Nossos diretórios pessoais são o lugar perfeito para as gemas adicionadas, e um rápido ajuste no PATH as torna acessíveis. Não posso recomendar a opção 1 porque alguém acabará substituindo uma gema e quebrando o código interno do sistema Ruby ou da Apple que a usa e, em seguida, eles farão mais uma pergunta no SO sobre como corrigi-la.
o homem de lata
1
Esta é uma excelente resposta, mas talvez desatualizada. Em Sierra, a opção que eu precisava era --install-dir / usr / local / bin
Ryan Ballantyne
107

No meu caso, tive que reinstalar o Ruby usando o Brew . Isso parece ter resolvido o problema, pois posso instalar gemas novamente.

brew install ruby

Depois disso, você precisa sair e fazer login novamente, graficamente ou apenas reiniciando seu terminal.

Francisco Gonzalez Rull
fonte
Funcionou bem para mim! Suponho que ele se livre de qualquer estranheza na instalação do pacote ruby ​​... IMO, essa é a melhor solução.
n13 11/02/16
Você pode dizer qual ruby ​​está sendo executado com `` `qual -a ruby ​​''` `Na minha máquina que fornece:` `$ which -a ruby ​​/ usr / local / bin / ruby ​​/ usr / local / bin / ruby ​​/ usr / bin / ruby ​​`` `Por que / usr / local / bin está no PATH duas vezes - parece que o brew install rubycoloca lá, mesmo que já esteja lá. Presumivelmente, o ruby ​​em / usr / local está configurado para instalar suas gemas em um local que não precisa de acesso root (o que realmente faz muito sentido).
WallStProg
7
PS Você precisa fazer logout e logon novamente (via Terminal) ou gem installisso ainda falhará.
WallStProg
Funcionou bem para mim. Combinei a resposta aceita com esta. Obrigado a ambos
youssman
1
Você não precisa sair e fazer login novamente. Apenas corra rehashpara garantir que seu shell perceba que há um novo rubyanteriormente no $PATH. Mesmo isso não será necessário na situação em que você ainda não executou rubya sessão do shell.
Radon Rosborough
38

Isso é devido à nova função de segurança do OS X "El Capitan". Tente adicionar em --user-installvez de usar o sudo:

$ gem install *** --user-install

Por exemplo, se você deseja instalar o fake3, basta usar:

$ gem install fake3 --user-install
Shao Wenbin
fonte
Sim! Muito obrigado!
Louis Magnotti 15/09/16
Depois de passar 30 minutos com a abordagem de infusão, finalmente fechando o terminal etc., esta solução funcionou na 10.10.5. Ainda não sabemos ao certo por que a abordagem de infusão não funcionou. Por favor, esclareça. qual ruby ​​post brew instala / usr / bin / ruby
vikramvi
1
Uau, agora o problema está de volta gem install redcarpet -v '3.3.4' --user-install error jogando AVISO: Você não possui /Users/user_name/.gem/ruby/2.0.0/bin no seu PATH, gem executáveis ​​não serão executados. Anteriormente, eu não estava recebendo esse erro
vikramvi
1
stackoverflow.com/questions/19579392/... , isso me ajudou a questão resolve finalmente
vikramvi
25
sudo gem install -n /usr/local/bin cocoapods

Tente isso. Definitivamente funcionará.

Femina Brahmbhatt
fonte
2
definitivamente não.
Maarten Hartman
19

Você precisa atualizar o Xcode para o mais novo (v7.0.1) e tudo funcionará normalmente.

Se depois de instalar o Xcode mais recente e ainda não funcionar, tente instalar o gem desta maneira:

sudo gem install -n /usr/local/bin GEM_NAME_HERE

Por exemplo:

sudo gem install -n /usr/local/bin fakes3
sudo gem install -n /usr/local/bin compass
sudo gem install -n /usr/local/bin susy
astrasleepz
fonte
10

Parece que ao atualizar para o OS X El Capitain, o diretório / usr / local é modificado de várias maneiras:

  1. as permissões de usuário são redefinidas (também é um problema para as pessoas que usam o Homebrew)
  2. binários e links simbólicos podem ter sido excluídos ou alterados

[Editar] Também há uma coisa preliminar a ser feita: atualizar o Xcode ...

Solução para # 1:

$ sudo chown -R $(whoami):admin /usr/local

Isso corrigirá as permissões no /usr/localdiretório, o que ajudará os comandos gem installe o brew install|link|...funcionamento correto.

Solução para # 2:

Problemas baseados em Ruby

Verifique se você corrigiu as permissões do /usr/localdiretório (veja o item 1 acima)

Primeiro tente reinstalar sua gema usando:

sudo gem install <gemname>

Observe que ele instalará a versão mais recente da gema especificada.

Se você não quiser enfrentar problemas de compatibilidade com versões anteriores, sugiro que você determine primeiro qual versão de qual jóia deseja obter e depois a reinstale com o -v version. Veja um exemplo abaixo para garantir que o sistema não receba uma nova versão do capistrano.

$ gem list | grep capistrano
capistrano (3.4.0, 3.2.1, 2.14.2)
$ sudo gem install capistrano -v 3.4.0

Questões baseadas em cerveja

Atualize o brew e atualize suas fórmulas

$ brew update
$ brew upgrade

Você também pode precisar vincular novamente alguns deles manualmente

$ brew link <formula>
foobar
fonte
3

Como já foi dito, o problema vem de uma função de segurança do Mac OSX desde o "El Capitan".

Usando o sistema padrão Ruby, o processo de instalação acontece no /Library/Ruby/Gems/2.0.0diretório que não está disponível para o usuário e fornece o erro.

Você pode dar uma olhada nos parâmetros do seu ambiente Ruby com o comando

$ gem env

Há um DIRETÓRIO DE INSTALAÇÃO e um DIRETÓRIO DE INSTALAÇÃO DO USUÁRIO. Para usar o diretório de instalação do usuário em vez do diretório de instalação padrão, você pode usar o --user-installparâmetro como usando o sudoque nunca é uma maneira recomendada de fazer.

$ gem install myGemName --user-install

Não deve haver mais nenhum problema de direitos no processo. As gemas são instaladas no diretório do usuário:~/.gem/Ruby/2.0.0/bin

Mas para disponibilizar as gemas instaladas, esse diretório deve estar disponível no seu caminho. De acordo com o FAQ do Ruby , você pode adicionar a seguinte linha ao seu ~/.bash_profileou~/.bashrc

if which ruby >/dev/null && which gem >/dev/null; then
    PATH="$(ruby -rubygems -e 'puts Gem.user_dir')/bin:$PATH"
fi

Em seguida, feche e recarregue seu terminal ou recarregue seu .bash_profileou .bashrc( . ~/.bash_profile)

emchateau
fonte
2

Esta é a solução que eu usei:

Nota: esta correção é para a bússola, como escrevi em outra questão SO, mas usei o mesmo processo para restaurar a funcionalidade de todos os processos terminais, obviamente as gemas que você está instalando são diferentes, mas o processo é o mesmo.

Eu tive o mesmo problema. Isso ocorre porque a Apple implementou o System Integrity Protection (SIP). Você precisa primeiro desativar isso ...

Reinicialize no modo de recuperação:

Reinicie e mantenha pressionada a tecla Command + R até ver o logotipo da apple.

Depois de inicializado, selecione Utilitários> Terminal na barra superior.

tipo: csrutil disable

então digite: reboot

Depois de reiniciado

Abra o backup do terminal e insira os comandos:

sudo gem uninstall bundler

sudo gem install bundler

sudo gem install compass

sudo gem install sass

sudo gem update --system

As gemas individuais que falharam precisam ser corrigidas, portanto, para cada uma, faça o seguinte:

Na minha máquina, essa foi a primeira dependência que não funcionou, por isso listei :

sudo gem pristine ffi --version 1.9.3

Prossiga pela lista de gemas que precisam ser reparadas. Ao todo, você espera cerca de 10 minutos para corrigi-lo, mas você terá comandos de terminal para o funcionamento da bússola.

Captura de tela

jbalesteri
fonte
2

Se a gema que você está tentando instalar exigir bibliotecas xml, tente o seguinte:

sudo gem install -n /usr/local/bin  <gem_name> -- --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib/

Especificamente, encontrei um problema ao instalar a nokogiri gem v 1.6.8 no OS X El Capitan

e isso finalmente funcionou para mim:

sudo gem install -n /usr/local/bin  nokogiri -- --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib/

Para garantir que você tenha o libxml2 e o libxslt instalado, você pode:

brew install libxml2 libxslt
brew install libiconv

e verifique se você possui as ferramentas de linha de comando do xcode instaladas:

xcode-select --install 

deve retornar este erro:

xcode-select: error: command line tools are already installed, use "Software Update" to install updates
Anirban Nandi 'Alegria'
fonte
1

A reinstalação do RVM funcionou para mim, mas tive que reinstalar todas as minhas jóias depois:

rvm implode
\curl -sSL https://get.rvm.io | bash -s stable --ruby
rvm reload
kkelleey
fonte
0

Corri o mesmo problema depois de instalar o El Capitan, tentei instalar o sass and compass em um projeto symfony, o seguinte comando retornou o seguinte erro:

$ sudo gem instalar bússola

ERRO: Erro ao instalar a bússola: ERRO: falha ao criar a extensão nativa da gema.

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb 

verificando ffi.h ... /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/mkmf.rb:434:in `try_do ': O compilador falhou ao gerar um arquivo executável. (RuntimeError)

Então tentei instalar o sass com: $ sudo gem install sass

Recebi a mesma mensagem de erro, depois de pesquisar no Google, consegui instalar o sass usando o seguinte comando:

$ sudo gem install -n / usr / local / bin sass

O exemplo acima funcionou para mim na instalação do sass, mas não na instalação da bússola. Eu li que alguém em algum lugar havia aberto uma instância do xcode, depois a fechou novamente e, em seguida, executou com sucesso o mesmo comando, após o qual funcionou para eles. Tentei abrir o xcode, mas recebi uma mensagem informando que a versão do xcode instalada não era compatível com o El Capitan. Então, atualizei o xcode da loja de aplicativos e executei novamente o seguinte comando, que desta vez foi executado com êxito:

$ sudo gem install -n / usr / local / bin compass

Eu era capaz de executar $ compass init

Agora eu tenho todas as minhas jóias funcionando e posso continuar a construir algumas coisas sass adoráveis ​​:)

Barry Poore
fonte
0

Eu tive que rm -rf ./vendorcorrer bundle installnovamente.

VoA
fonte
-1

Não gosto de instalar coisas com o sudo. uma vez que você começa com sudo, você não pode parar ..

tente dar permissões ao diretório Gems.

sudo chown -R $(whoami) /Library/Ruby/Gems/2.0.0
alonn24
fonte
2
Não altere a propriedade das gemas Ruby do sistema. Isso pode causar problemas quando o Mac OS tenta atualizar qualquer coisa.
the Tin Man
-1
sudo chown -R $(whoami):admin /usr/local

Isso devolverá as permissões (o Homebrew instala o ruby ​​lá)

Espelho318
fonte
2
Se você executar este comando e ele atrapalhar as permissões dos seus dados MySQL, será necessário definir as permissões novamente. Aqui está como. stillatmylinux.com/not-every-linux-command-is-good-for-you
stillatmylinux