Não é possível instalar gems no OS X “El Capitan”

Eu não sou capaz de instalar e executar fakes3 gem 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 do jeito cocoapods. Funcionou para cocoapods mas não para fakes3.

 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. 

Disclaimer: @theTinMan e outros desenvolvedores Ruby geralmente apontam para não usar o sudo ao instalar gems e apontar coisas como RVM . Isso é absolutamente verdade quando se está desenvolvendo Ruby. Vá em frente e use isso.

No entanto, muitos de nós só querem algum binário que seja distribuído como uma jóia (por exemplo, cocoapods , xcpretty , xcpretty …). Eu definitivamente não quero me preocupar em administrar um ruby separado. Aqui estão as suas opções mais rápidas:

Opção 1: Continue usando o sudo

Usar o sudo provavelmente é bom se você quiser que essas ferramentas sejam instaladas globalmente.

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

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

Gems serão instaladas em /usr/local/bin e todos os usuários em seu sistema poderão usá-los se estiverem em seu PATH .

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

O seguinte irá instalar gems em ~/.gem e colocar binários em ~/bin (que você deve então adicionar ao seu PATH ).

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

Tornar o padrão

De qualquer forma, você pode adicionar esses parâmetros ao seu ~/.gemrc para não precisar se lembrar deles:

 gem: -n/usr/local/bin 

ou seja, echo "gem: -n/usr/local/bin" >> ~/.gemrc

ou

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

ou seja, echo "gem: --user-install -n~/bin" >> ~/.gemrc

( Dica: Você também pode --no-document em --no-document para pular a geração da documentação do desenvolvedor Ruby.)

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 fazer logout e login novamente, seja graficamente ou apenas reiniciando seu terminal.

Isso é por causa da nova function de segurança do OS X “El Capitan”. Tente adicionar --user-install vez de usar o sudo:

 $ gem install *** --user-install 

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

 $ gem install fake3 --user-install 
 sudo gem install -n /usr/local/bin cocoapods 

Tente isso. Definitivamente funcionará.

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

Se depois de instalar o mais novo Xcode e ainda assim não funcionar tente instalar o gem desta forma:

 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 

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

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

[Editar] Há também uma coisa preliminar a fazer: atualizar o Xcode …

Solução para o nº 1:

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

Isso consertará as permissions no /usr/local , o que ajudará os comandos gem install e brew install|link|... funcionando corretamente.

Solução para o nº 2:

Problemas baseados em Ruby

Certifique-se de ter consertado as permissions do /usr/local (veja o item 1 acima)

Primeiro tente reinstalar sua gema usando:

 sudo gem install  

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

Se você não quiser enfrentar problemas de compatibilidade com versões anteriores, sugiro que primeiro determine qual versão de qual gem você deseja obter e, em seguida, reinstale-a com a -v version . Veja um exemplo abaixo para se certificar de que o sistema não receberá 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 

Problemas baseados em cervejas

Atualizar brew e atualizar suas fórmulas

 $ brew update $ brew upgrade 

Você também pode precisar vincular alguns deles manualmente

 $ brew link  

Como já foi dito, a questão vem de uma function de segurança do Mac OSX desde “El Capitan”.

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

Você pode dar uma olhada nos seus parâmetros de ambientes 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 parâmetro --user-install vez de usar o sudo que nunca é uma maneira de fazer recommanded.

 $ gem install myGemName --user-install 

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

Mas para disponibilizar os gems instalados, esse diretório deve estar disponível em seu caminho. De acordo com o faq do Ruby , você pode adicionar a seguinte linha ao seu ~/.bash_profile ou ~/.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_profile ou .bashrc ( . ~/.bash_profile )

Esta é a solução que usei:

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

Eu tive o mesmo problema. É devido a Apple implementar o System Integrity Protection (SIP). Você tem que primeiro desabilitar isso …

Reinicie no modo de recuperação:

Reinicie e segure Command + R até ver o logotipo da maçã.

Uma vez iniciado, selecione Utilitários> Terminal na barra superior.

tipo: csrutil disable

então digite: reboot

Uma vez reiniciado

Abra o terminal de volta 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 gems individuais que falharam precisam ser consertadas, portanto, para cada uma delas faça o seguinte:

Na minha máquina esta foi a primeira dependência não está funcionando, então eu listei :

sudo gem pristine ffi --version 1.9.3

Prossiga pela lista de gemas que precisam ser reparadas. Em tudo o que você está olhando cerca de 10 minutos para consertá-lo, mas você terá comandos de terminal para bússola trabalhando.

Screenshot

Reinstalar o RVM funcionou para mim, mas tive que reinstalar todas as minhas gemas depois:

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

Se a gema que você está tentando instalar requer bibliotecas xml, tente isto:

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

Especificamente, me deparei com um problema ao instalar o 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 ter certeza de que você tem libxml2 e libxslt instalados, você pode fazer:

 brew install libxml2 libxslt brew install libiconv 

e, em seguida, verifique se você tem 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 

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

tente dar permissions ao diretório Gems.

 sudo chown -R $(whoami) /Library/Ruby/Gems/2.0.0 
 sudo chown -R $(whoami):admin /usr/local 

Isso dará permissions de volta (o Homebrew instala o ruby ​​lá)

Eu corri o mesmo problema depois de instalar o El Capitan, tentei instalar sass e compass em um projeto do symfony, o seguinte comando retornou o seguinte erro:

$ sudo gem instalar bússola

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

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

verificação de 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 eu tentei instalar o sass com: $ sudo gem install sass

Tenho a mesma mensagem de erro, depois de algum googling consegui instalar o sass usando o seguinte comando:

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

O acima funcionou para mim com a instalação de sass mas não funcionou para instalar a bússola. Eu li que alguém em algum lugar tinha aberto uma instância do xcode, em seguida, fechou-o novamente e, em seguida, correu com sucesso o mesmo comando depois que funcionou para eles. Eu tentei abrir o xcode, mas fui alertado com uma mensagem dizendo 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 comando a seguir, que desta vez foi executado com êxito:

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

Eu era então capaz de executar o $ compass init

Agora eu tenho todas as minhas gemas trabalhando e posso continuar a construir algumas coisas adoráveis ​​de sass 🙂

Eu tive que rm -rf ./vendor seguida, execute o bundle install novamente.