Làm thế nào để Ruby / Homebrew / RVM hoạt động trên Yosemite?


118

Sau khi cài đặt Yosemite, tôi không thể chạy brew hoặc ruby.

Tôi gặp lỗi này khi cập nhật bia:

/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

gặp lỗi này trên 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 `'

Câu trả lời:


281

Có thể dễ dàng sửa lỗi này theo các bước sau:

1) Mở thiết bị đầu cuối

2) Loại nano /usr/local/Library/brew.rb

3) Trong dòng đầu tiên, thay đổi “1.8” thành “Hiện tại”, vì vậy nó sẽ giống như sau:

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

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


14
khi tôi thực hiện thay đổi này, tôi nhận được lỗi "Homebrew đòi hỏi Leopard hoặc cao hơn Để được hỗ trợ Tiger, xem:. github.com/mistydemeo/tigerbrew " mặc dù tôi đang chạy Yosemite
scientiffic

4
điều này tạo ra một Please, commit your changes or stash them before you can merge.lỗi khi bạn cố gắng brew updatekhông may.
Naoise Golden

10
"C" phải được viết hoa cho Hiện tại#!/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby -W0
Diablo

@Diablo Tôi tin rằng điều này đã được cập nhật trong 10.10.1. Trong phiên bản trước, chữ "C" không được viết hoa. Cảm ơn.
raz0r

1
Tôi cũng nhận được Homebrew requires Leopard or higher- Tôi đã làm theo câu trả lời bên dưới cài đặt các công cụ dòng lệnh xcode và nó hiện hoạt động: stackoverflow.com/a/24225960/1062936
greg

39

Tôi đã cập nhật lên Yosemite và sau đó phát hiện ra nó brewđã bị hỏng.

/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

Nếu bạn chưa thực hiện bất kỳ thay đổi nào đối với cách pha, đây là những gì tôi đề xuất. Nếu không, hãy đọc thêm bên dưới.

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

Bạn đã thực hiện các thay đổi để tạo tệp và mắc kẹt trong một mớ hỗn độn git?

Tôi đã cố gắng chỉnh sửa /usr/local/Library/brew.rbnhưng thay đổi cục bộ đối với git repo của tôi đã ngăn brew updatekhông cho kéo các bản cập nhật xuống. Tôi đã thử một số giải pháp khác được đề cập trên trang này và từ các trang khác và tôi đã kết thúc với một mớ hỗn độn git và tất cả những gì tôi muốn làm là hoàn tác mọi thứ tôi đã làm để tạo ra.

Tôi đã cam kết thay đổi nhưng nó khiến mọi thứ trở nên tồi tệ hơn. Cuối cùng tôi đã phải hoàn tác các cam kết của mình và git reset --hard HEAD~1cho đến khi tôi ở đúng cam kết. Tôi cũng gặp phải một đống tệp chưa được phiên bản (tôi đã thay đổi quyền đối với tệp trong / usr / Local) vì vậy tôi đã thực hiện thao git clean -f -dtác xóa tất cả các tệp và thư mục chưa phiên bản và đưa tôi trở lại nơi bắt đầu trước khi thực hiện bất kỳ thay đổi nào.


3
Câu trả lời này đã hoạt động (bao gồm cả việc hoàn tác git lộn xộn) khi câu trả lời được bình chọn hàng đầu khiến tôi gặp vấn đề về git.
Steve M

Rất hữu ích sau khi nâng cấp hệ thống của bạn! Cảm ơn
nghiện mã hóa

Điều này không thành công trong El Capitan với "ln: hoạt động không được phép" do chế độ rootless. Bạn có thể tìm thấy giải pháp thay thế tại đây: apple.stackexchange.com/questions/196224/…
Jorge Ortiz,

37

Các bước để sửa nó:

  1. Cài đặt công cụ dòng lệnh cho Xcode 6

  2. Cài đặt lại bia:

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  3. Sau khi cài đặt brew, rvm sẽ hoạt động:

    rvm install ruby

Làm việc cho tôi, yahoo!


tôi đã nhận ruby và chạy, nhưng điều này vẫn không làm việc cho tôi: stackoverflow.com/questions/24113251/...
eden

Tôi đã gỡ bỏ rvm và nginx hoàn toàn và cài đặt lại chúng sau khi cài đặt các công cụ dành cho nhà phát triển Xcode 6. Bây giờ nó hoạt động như một sự quyến rũ.
wout

1
Điều này làm việc cho tôi quá, chỉ muốn làm rõ để chạy lệnh này cho bước 1: xcode-chọn -install
James Toomey

33

Chỉnh sửa kịch bản có nghĩa là brew updatesẽ không hoạt động; có các chỉnh sửa cục bộ đối với các tệp được theo dõi gây ra git pulllỗi.

Tôi đã làm điều này, mà tôi nghi ngờ là sạch hơn:

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

Không có khiếu nại từ brew doctor.


Khi thực hiện việc này, tôi gặp lỗi về các tệp chưa được theo dõi phải được di chuyển trước khi hợp nhất. Đây là tất cả các tệp trong Thư viện / Công thức /.
septerr

Giả sử bạn chưa chỉnh sửa bất cứ điều gì, khi điều đó xảy ra với tôi, điều đó có nghĩa là tôi cần chạy brew doctorvà làm theo một số hướng dẫn. Vấn đề là điều đó brew doctorcó thể không hiệu quả với bạn, nếu bạn ở đây. Bạn có thể chỉ có thể git stashvà tiếp tục.
Otto

7

Đây là tổng hợp từ các câu trả lời từ các bài đăng của người khác cũng như một chút đào sâu trên Google, nhưng tôi nghĩ rằng tôi sẽ đưa nó lên để câu trả lời hoàn chỉnh ở một nơi. Cụ thể, điều này giúp mọi thứ hoạt động ngay bây giờ, nhưng cũng cho phép bạn thực hiện cập nhật như bình thường và làm cho mọi thứ sạch sẽ trở lại.

  1. Mở /usr/local/Library/brew.rb (emacs / vi / nano / anything)
  2. Thay đổi dòng đầu tiên để đọc: #!/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby -W0. Bạn chỉ cần thay đổi "1.8" ở dòng đó thành "Hiện tại" (hãy đảm bảo rằng bạn giữ nguyên chữ "C", nếu không git sẽ bị nhầm lẫn sau này).
  3. cd $(brew --repository)
  4. git add Library/brew.rb
  5. git commit -m "upgrading to ruby 2.0"
  6. brew update(hoặc sudo brew updatenếu nhà máy bia của bạn được thiết lập để chỉ thay đổi hệ thống với sudo)

Tín dụng: rất nhiều điều này đến từ đây , mặc dù tôi thực sự khuyên bạn không nên làm git commit -amtrong thư mục / usr / local của bạn.


Đây là giải pháp duy nhất làm việc cho tôi. Chính vì những mớ hỗn độn siêu xấu xí thường xuyên xảy ra như thế này mà tôi đang chuyển từ Ruby và Rails cho ứng dụng tiếp theo của mình.
Deborah

3

Giống như cái trước đã nói: 1) Thay đổi thành hiện tại 2) cài đặt xcode 6

Nếu bây giờ bạn gặp vấn đề khác với brew và ruby, điều này sẽ hữu ích: Bằng cách nào đó, brew cần ruby ​​trên phiên bản 1.8, vì vậy hãy tạo thư mục:

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

và tạo một liên kết biểu tượng:

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

Cảm ơn! Đây là giải pháp duy nhất làm việc cho tôi;)
alejandromp

2

Hãy xem hướng dẫn này tại đây: http://ryantvenge.com/2014/09/ruby-homebrea-yosemite/

Nó đã làm việc cho tôi!


Mặc dù liên kết này có thể trả lời câu hỏi, nhưng tốt hơn hết bạn nên đưa các phần thiết yếu của câu trả lời vào đây và cung cấp liên kết để tham khảo. Các câu trả lời chỉ có liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi.
bummi

1

Tôi đã sửa điều này như sau :

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


0

Lưu ý: Chỉ thực hiện những điều dưới đây nếu bạn rơi vào trạng thái hoàn toàn thất bại, vì điều này rất NGUY HIỂM

Như một ví dụ tôi tiếp tục nhận được

$ sudo ln -s Hiện tại 1,8

cập nhật $ brew

/usr/local/Library/brew.rb:18:in ': phương pháp không xác định trợ giúp?' cho [“update”]: Array (NoMethodError)

Tôi chỉ nhận được điều này… (không có vấn đề gì chỉ cần chuyển đổi “cập nhật” bằng lệnh) Tôi đã giải quyết vấn đề bằng cách yêu cầu một /usr/localthư mục bạn bè . Sau đó tôi đã tạo một bản sao lưu /usr/localthư mục của mình .

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

Sau đó tôi chuyển anh ấy /usr/localsang của tôi

sudo mv ~ / Downloads / local / usr / local

Lưu ý: Bạn có thể sẽ mất một số dữ liệu, vì vậy hãy đảm bảo sao lưu.


-1

Tôi đã gặp sự cố khi cố gắng cài đặt Ruby bằng trình quản lý gói. Công bằng mà nói, tôi thừa nhận mình có ít kinh nghiệm với chúng và không cố gắng tìm hiểu sâu hơn như hầu hết những người trả lời khác đã làm. Tôi lười và thích sử dụng trình cài đặt nhị phân có sẵn cho hầu hết các lựa chọn opsys và nhiều gói. Thật không may, Ruby dường như không cung cấp.

Tôi thấy ruby-build dễ cài đặt (độc lập - không phải plugin) và nó đã xây dựng Ruby từ các nguồn mà không có lỗi và đặt nó ở nơi tôi muốn.

Bingo - dễ dàng :) Đây có vẻ như là một sự thay thế tốt cho những người trong chúng ta của người quản lý gói thử thách khả năng thuyết phục.

Charlie

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.