Bagaimana cara membuat Ruby / Homebrew / RVM bekerja di Yosemite?


118

Setelah menginstal Yosemite, saya tidak dapat menjalankan brew atau ruby.

Saya mendapatkan kesalahan ini pada pembaruan minuman:

/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

mendapatkan kesalahan ini di 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 `'

Jawaban:


281

Kesalahan ini dapat dengan mudah diperbaiki dengan langkah-langkah berikut:

1) Buka terminal

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

3) Pada baris pertama, ubah "1.8" menjadi "Saat Ini", jadi akan terlihat seperti ini:

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

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


14
ketika saya melakukan perubahan ini, saya mendapatkan pesan kesalahan "Homebrew membutuhkan Leopard atau lebih tinggi. Untuk dukungan Tiger, lihat: github.com/mistydemeo/tigerbrew " meskipun saya menjalankan yosemite
scientiffic

4
ini memberikan Please, commit your changes or stash them before you can merge.kesalahan ketika Anda mencoba brew updatesayangnya.
Naoise Golden

10
"C" harus menggunakan huruf besar untuk Current#!/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby -W0
Diablo

@Diablo Saya yakin ini telah diperbarui pada 10.10.1. Pada versi sebelumnya, "C" tidak menggunakan huruf besar. Terima kasih.
raz0r

1
Saya juga mendapatkan Homebrew requires Leopard or higher- saya mengikuti jawaban di bawah ini, instal alat baris perintah xcode dan sekarang berfungsi: stackoverflow.com/a/24225960/1062936
greg

39

Saya memperbarui ke Yosemite dan kemudian menemukan brewrusak.

/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

Jika Anda belum membuat perubahan apa pun pada minuman, inilah yang saya rekomendasikan. Jika tidak, baca lebih lanjut di bawah.

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

Sudah melakukan perubahan pada file bir dan terjebak dalam kekacauan git?

Saya mencoba mengedit /usr/local/Library/brew.rbtetapi perubahan lokal ke repo git saya mencegah brew updatemenarik pembaruan. Saya mencoba beberapa solusi lain yang disebutkan di halaman ini dan dari situs lain dan saya berakhir dengan kekacauan besar dan yang ingin saya lakukan hanyalah membatalkan semua yang telah saya lakukan untuk menyeduh.

Saya melakukan perubahan saya tetapi itu memperburuk keadaan. Akhirnya saya harus membatalkan komitmen saya dan git reset --hard HEAD~1sampai saya berada pada komitmen yang tepat. Saya juga memiliki file tidak berversi yang berantakan (saya mengubah izin file di / usr / Local) jadi saya melakukan git clean -f -dyang menghapus semua file dan direktori tidak berversi dan mengembalikan saya ke tempat saya memulai sebelum saya membuat perubahan apa pun.


3
Jawaban ini berhasil (termasuk membatalkan kekacauan git) di mana sebagai jawaban yang dipilih teratas meninggalkan saya dengan masalah git.
Steve M

Sangat berguna setelah meningkatkan sistem Anda! Terima kasih
kecanduan coding

Ini gagal di El Capitan dengan "ln: operasi tidak diizinkan" karena mode tanpa root. Anda dapat menemukan solusinya di sini: apple.stackexchange.com/questions/196224/…
Jorge Ortiz

37

Langkah-langkah untuk memperbaikinya:

  1. Instal alat baris perintah untuk Xcode 6

  2. Instal ulang minuman:

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  3. Setelah minuman diinstal, rvm akan berfungsi:

    rvm install ruby

Bekerja untuk saya, yahoo!


Saya mendapatkan ruby ​​dan menjalankannya, tetapi ini masih tidak berfungsi untuk saya: stackoverflow.com/questions/24113251/…
eden

Saya menghapus rvm dan nginx sepenuhnya dan menginstalnya kembali setelah menginstal alat pengembang Xcode 6. Sekarang ini bekerja seperti pesona.
wout

1
Ini bekerja untuk saya juga, hanya ingin mengklarifikasi untuk menjalankan perintah ini untuk langkah 1: xcode-select --install
James Toomey

33

Mengedit skrip brew updatetidak akan berhasil; ada pengeditan lokal untuk file yang dilacak yang menyebabkan git pullkegagalan.

Saya melakukan ini, yang menurut saya lebih bersih:

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

Tidak ada keluhan dari brew doctor.


Ketika saya melakukan ini, saya mendapatkan kesalahan tentang file yang tidak terlacak yang harus dipindahkan sebelum penggabungan. Ini semua adalah file di Library / Formula /.
septerr

Dengan asumsi Anda belum mengedit apa pun, ketika itu terjadi pada saya, itu berarti saya harus menjalankan brew doctordan mengikuti beberapa instruksi. Masalahnya adalah itu brew doctormungkin tidak berhasil untuk Anda, jika Anda di sini. Anda mungkin hanya bisa git stashdan melanjutkan.
Otto

7

Ini adalah konglomerasi dari jawaban dari postingan orang lain dan juga dari penggalian di Google, tapi saya pikir saya akan memasangnya sehingga jawaban lengkap ada di satu tempat. Secara khusus ini membuat semuanya berfungsi sekarang, tetapi juga memungkinkan Anda melakukan pembaruan minuman seperti biasa dan membersihkan semuanya lagi.

  1. Buka /usr/local/Library/brew.rb (emacs / vi / nano / apa saja)
  2. Mengubah baris pertama untuk membaca: #!/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby -W0. Anda hanya mengubah "1.8" yang ada di baris itu menjadi "Saat Ini" (pastikan Anda tetap menggunakan "C" jika tidak git akan bingung nanti).
  3. cd $(brew --repository)
  4. git add Library/brew.rb
  5. git commit -m "upgrading to ruby 2.0"
  6. brew update(atau sudo brew updatejika minuman Anda diatur untuk hanya melakukan perubahan sistem dengan sudo)

Kredit: banyak dari ini datang dari sini , meskipun saya sangat menyarankan untuk tidak melakukannya git commit -amdi folder / usr / local Anda.


Ini adalah satu-satunya solusi yang berhasil untuk saya. Karena seringnya kekacauan super jelek seperti ini, saya pindah dari Ruby dan Rails untuk aplikasi saya berikutnya.
Deborah

3

Seperti yang sebelumnya dikatakan: 1) Ubah ke saat ini 2) instal xcode 6

Jika Anda sekarang memiliki masalah lebih lanjut dengan brew dan ruby, ini akan membantu: Entah bagaimana brew membutuhkan ruby ​​pada versi 1.8, jadi buat foldernya:

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

dan buat symlink:

sudo ln -s /usr/bin/ruby /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby

Terima kasih! Ini adalah satu-satunya solusi yang berhasil untuk saya;)
alejandromp


1

Saya memperbaikinya sebagai berikut:

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


0

Catatan: Lakukan hal di bawah ini hanya jika Anda sepenuhnya gagal, karena ini sangat BERBAHAYA

Sebagai contoh saya terus mendapatkan

$ sudo ln -s Saat ini 1.8

$ brew update

/usr/local/Library/brew.rb:18:in ': bantuan metode tidak terdefinisi?' untuk ["update"]: Array (NoMethodError)

Saya baru saja mendapatkan ini… (tidak peduli apa perintah hanya mengganti "update" dengan perintah) saya memecahkan masalah dengan meminta /usr/localfolder teman . Saya kemudian membuat cadangan /usr/localfolder saya .

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

Saya kemudian memindahkan miliknya /usr/localke milik saya

sudo mv ~ / Unduhan / local / usr / local

Catatan: Anda mungkin akan kehilangan beberapa data, jadi pastikan untuk membuat cadangan.


-1

Saya mengalami masalah saat mencoba menginstal Ruby menggunakan manajer paket. Sejalan dengan program-program ini, saya mengaku memiliki sedikit pengalaman dengan mereka dan tidak berusaha untuk menggali lebih dalam seperti yang dilakukan oleh kebanyakan responden lainnya. Saya malas dan lebih suka menggunakan penginstal biner yang tersedia untuk sebagian besar pilihan opsys dan banyak paket. Sayangnya, Ruby sepertinya tidak menyediakannya.

Saya menemukan ruby-build mudah dipasang (berdiri sendiri - bukan plugin), dan itu membangun Ruby dari sumber tanpa kesalahan dan meletakkannya di tempat yang saya inginkan.

Bingo - mudah :) Ini terlihat seperti alternatif yang baik bagi kita dari manajer paket yang tertantang persuasi.

Charlie

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.