Como fazer o Ruby / Homebrew / RVM funcionar no Yosemite?

118

Depois de instalar o Yosemite, não consegui executar brew ou ruby.

Eu estava recebendo este erro na atualização do brew:

/usr/local/bin/brew: /usr/local/Library/brew.rb: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby: bad interpreter: No such file or directory
/usr/local/bin/brew: line 23: /usr/local/Library/brew.rb: Undefined error: 0

recebendo este erro no irb:

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:245:in mkdir': Permission denied - /Library/Ruby/Gems/2.0.0/extensions/universal-darwin-14 (Errno::EACCES) from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:245:infu_mkdir'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:219:in block (2 levels) in mkdir_p' from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:217:inreverse_each'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:217:in block in mkdir_p' from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:203:ineach'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:203:in mkdir_p' from /Library/Ruby/Site/2.0.0/rubygems/ext/builder.rb:210:inwrite_gem_make_out'
from /Library/Ruby/Site/2.0.0/rubygems/ext/builder.rb:132:in build_error' from /Library/Ruby/Site/2.0.0/rubygems/ext/builder.rb:171:inrescue in build_extension'
from /Library/Ruby/Site/2.0.0/rubygems/ext/builder.rb:156:in build_extension' from /Library/Ruby/Site/2.0.0/rubygems/ext/builder.rb:198:inblock in build_extensions'
from /Library/Ruby/Site/2.0.0/rubygems/ext/builder.rb:195:in each' from /Library/Ruby/Site/2.0.0/rubygems/ext/builder.rb:195:inbuild_extensions'
from /Library/Ruby/Site/2.0.0/rubygems/specification.rb:1436:in block in build_extensions' from /Library/Ruby/Site/2.0.0/rubygems/user_interaction.rb:45:inuse_ui'
from /Library/Ruby/Site/2.0.0/rubygems/specification.rb:1434:in build_extensions' from /Library/Ruby/Site/2.0.0/rubygems/stub_specification.rb:60:inbuild_extensions'
from /Library/Ruby/Site/2.0.0/rubygems/basic_specification.rb:56:in contains_requirable_file?' from /Library/Ruby/Site/2.0.0/rubygems/specification.rb:925:inblock in find_inactive_by_path'
from /Library/Ruby/Site/2.0.0/rubygems/specification.rb:924:in each' from /Library/Ruby/Site/2.0.0/rubygems/specification.rb:924:infind'
from /Library/Ruby/Site/2.0.0/rubygems/specification.rb:924:in find_inactive_by_path' from /Library/Ruby/Site/2.0.0/rubygems.rb:185:intry_activate'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/locale.rb:150:in block in search_file' from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/locale.rb:158:inblock in each_localized_path'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/locale.rb:167:in each_sublocale' from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/locale.rb:157:ineach_localized_path'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/locale.rb:145:in search_file' from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/locale.rb:124:infind'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/locale.rb:108:in load' from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/locale.rb:32:ininitialize'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/init.rb:114:in new' from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/init.rb:114:ininit_config'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb/init.rb:16:in setup' from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/irb.rb:380:instart'
from /usr/bin/irb:12:in `'
Éden
fonte

Respostas:

281

Esse erro pode ser facilmente corrigido nas seguintes etapas:

1) Abra o terminal

2) Tipo nano /usr/local/Library/brew.rb

3) Na primeira linha, altere “1,8 ″ para“ Atual ”, para que fique assim:

#!/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby -W0

via http://blog.ic3man.gr/2014/06/homebrew-ruby-bad-interpreter-no-such-file-or-directory/

raz0r
fonte
14
quando faço essa alteração, recebo o erro "Homebrew requer Leopard ou superior. Para obter suporte do Tiger, consulte: github.com/mistydemeo/tigerbrew ", embora esteja executando o yosemite
scientiffic de
4
isso dá um Please, commit your changes or stash them before you can merge.erro quando você tenta brew updateinfelizmente.
Naoise Golden
10
"C" deve ser capitalizado para Atual#!/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby -W0
Diablo
@Diablo Eu acredito que isso foi atualizado em 10.10.1. Na versão anterior, o "C" não era capitalizado. Obrigado.
raz0r
1
Eu também recebi a Homebrew requires Leopard or higher- segui a resposta abaixo instalar ferramentas de linha de comando xcode e agora funciona: stackoverflow.com/a/24225960/1062936
greg
39

Eu atualizei para o Yosemite e depois descobri que brewestava quebrado.

/usr/local/bin/brew: /usr/local/Library/brew.rb: 
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby: bad interpreter: No such file or directory /usr/local/bin/brew: line 23: /usr/local/Library/brew.rb: Undefined error: 0

Se você ainda não fez nenhuma alteração na cerveja, aqui está o que eu recomendo. Caso contrário, leia mais abaixo.

  1. cd /System/Library/Frameworks/Ruby.framework/Versions/
  2. sudo ln -s Current 1.8
  3. brew update
  4. sudo unlink 1.8

Já fez alterações nos arquivos de preparação e ficou preso em uma bagunça git?

Tentei editar, /usr/local/Library/brew.rbmas a mudança local no meu repositório git estava impedindobrew update de puxar as atualizações. Tentei algumas outras soluções mencionadas nesta página e de outros sites e acabei com uma bagunça idiota e tudo o que eu queria fazer era desfazer tudo que tinha feito para preparar.

Eu cometi minha mudança, mas piorou as coisas. Eventualmente eu tive que desfazer meus commits e git reset --hard HEAD~1até que eu estivesse no commit-ish certo. Eu tinha uma bagunça de arquivos não versionados também (mudei as permissões dos arquivos em / usr / Local), então fiz um git clean -f -dque removeu todos os arquivos e diretórios não versionados e me levou de volta ao ponto de partida antes de fazer qualquer mudança.

Jason R
fonte
3
Essa resposta funcionou (incluindo desfazer a bagunça do git), enquanto a resposta mais votada me deixou com o problema do git.
Steve M
Muito útil após atualizar seu sistema! Obrigado
viciado em codificação de
Isso falha no El Capitan com "ln: operação não permitida" por causa do modo sem raiz. Você pode encontrar uma solução alternativa aqui: apple.stackexchange.com/questions/196224/…
Jorge Ortiz
37

Passos para corrigir:

  1. Instale ferramentas de linha de comando para Xcode 6

  2. Reinstale a mistura:

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  3. Assim que a mistura estiver instalada, o rvm funcionará:

    rvm install ruby

Funcionou para mim, yahoo!

Éden
fonte
Eu tenho o Ruby instalado e funcionando, mas isso ainda não está funcionando para mim: stackoverflow.com/questions/24113251/…
eden
Eu removi o rvm e o nginx completamente e os reinstalei após instalar as ferramentas de desenvolvedor do Xcode 6. Agora está funcionando como um encanto.
wout
1
Isso funcionou para mim também, só queria esclarecer para executar este comando para a etapa 1: xcode-select --install
James Toomey
33

Editar o script significa brew updateque não funcionará; existem edições locais para arquivos rastreados que faz com que ogit pull falhe.

Eu fiz isso, o que eu suspeito ser mais limpo:

cd /usr/local/Library
git pull -q origin refs/heads/master:refs/remotes/origin/master

Não há reclamações de brew doctor.

Otto
fonte
Quando faço isso, recebo um erro sobre arquivos não rastreados que devem ser movidos antes da mesclagem. Todos esses são arquivos da Biblioteca / Fórmula /.
septerr
Supondo que você não tenha editado nada, quando isso acontecer comigo, significa que preciso executar brew doctore seguir algumas instruções. O problema é que brew doctorprovavelmente não funciona para você, se você está aqui. Você pode simplesmente ser capaz de git stashcontinuar.
Otto
7

Este é um conglomerado de respostas de postagens de outras pessoas, bem como um pouco de pesquisa no Google, mas achei melhor colocá-lo para que uma resposta completa esteja em um só lugar. Especificamente, isso faz com que as coisas funcionem agora, mas também permite que você faça atualizações de preparação normalmente e deixa tudo limpo novamente.

  1. Abra /usr/local/Library/brew.rb (emacs / vi / nano / qualquer que seja)
  2. Alterar a primeira linha para ler: #!/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby -W0. Você está apenas mudando o "1.8" que estava naquela linha para "Atual" (certifique-se de manter o "C" maiúsculo, caso contrário o git ficará confuso mais tarde).
  3. cd $(brew --repository)
  4. git add Library/brew.rb
  5. git commit -m "upgrading to ruby 2.0"
  6. brew update(ou sudo brew updatese sua bebida estiver configurada para fazer alterações de sistema apenas com sudo)

Crédito: muito disso veio daqui , embora eu realmente não recomende fazer isso git commit -amem sua pasta / usr / local.

Eli
fonte
Esta é a única solução que funcionou para mim. É por causa das bagunças super-feias frequentes como essa que estou mudando de Ruby e Rails para meu próximo aplicativo.
Deborah
3

Como o dito antes: 1) Mude para o atual 2) instale o xcode 6

Se agora você tiver mais problemas com o brew e o ruby, isso deve ajudar: De alguma forma, o brew precisa do ruby ​​na versão 1.8, então crie a pasta:

sudo mkdir -p /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin

e faça um link simbólico:

sudo ln -s /usr/bin/ruby /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
Vanessa Böhner
fonte
Obrigado! Esta foi a única solução que funcionou para mim;)
alejandromp
2

Dê uma olhada neste tutorial aqui: http://ryantvenge.com/2014/09/ruby-homebrea-yosemite/

Funcionou para mim!

user790999
fonte
Embora este link possa responder à pergunta, é melhor incluir as partes essenciais da resposta aqui e fornecer o link para referência. As respostas somente com link podem se tornar inválidas se a página vinculada mudar.
bummi
1

Eu corrigi isso da seguinte maneira:

  1. sudo chown -R $(whoami):admin /usr/local
  2. cd $(brew --prefix) && git fetch origin && git reset --hard origin/master
Alex Lin
fonte
0

Observação: só faça o seguinte se você acabar em um estado de falha completa, pois isso é muito PERIGOSO

Como exemplo, continuei recebendo

$ sudo ln -s Atual 1.8

atualização de $ brew

/usr/local/Library/brew.rb:18:in ': ajuda do método indefinido?' para [“atualização”]: Array (NoMethodError)

Acabei de entender isso ... (não importa o comando, basta alternar “atualizar” com o comando). Resolvi o problema pedindo uma /usr/localpasta de amigos . Em seguida, fiz um backup da minha /usr/localpasta.

sudo mv / usr / local /usr/local.orig

Eu então mudei o dele /usr/localpara o meu

sudo mv ~ / Downloads / local / usr / local

Nota: Você provavelmente perderá alguns dados, portanto, certifique-se de fazer um backup.

abc123
fonte
-1

Tive problemas ao tentar instalar Ruby usando gerenciadores de pacotes. Para ser justo com esses programas, admito ter pouca experiência com eles e não fiz o esforço de ir mais fundo como a maioria dos outros respondentes fez. Sou preguiçoso e prefiro usar um instalador binário disponível para a maioria das opções de opsys e muitos pacotes. Infelizmente, Ruby não parece fornecer um.

Achei o ruby-build fácil de instalar (independente - não o plug-in), e ele construiu Ruby a partir de fontes sem erros e o colocou onde eu queria.

Bingo - fácil :) Esta parece ser uma boa alternativa para nós da persuasão do gerenciador de pacotes desafiada.

Charlie

Charles Parker
fonte