Không thể cài đặt đá quý trên OS X Đổi El Capitan


182

Tôi không thể cài đặt và chạy fakes3gem trên El Capitan Beta 5.

Tôi đã thử:

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

Sau đó, tôi đã thử làm nó theo cách cocoapods. Nó hoạt động cho cocoapods nhưng không phải cho hàng giả3.

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.

3
Không sử dụng sudođể cài đặt Ruby hoặc thay đổi đá quý. Thay vào đó, hãy sử dụng rbenv hoặc RVM để cài đặt và quản lý Ruby. Đọc và làm theo hướng dẫn trên các trang web tương ứng của họ. Và, trong cả hai trường hợp, sau khi cài đặt, không sử dụng sudotrừ khi bạn hiểu điều gì đang thay đổi và tại sao bạn muốn làm điều đó.
Tin Man

Câu trả lời:


333

Tuyên bố miễn trừ trách nhiệm: @theTinMan và các nhà phát triển Ruby khác thường chỉ ra không sử dụng sudokhi cài đặt đá quý và chỉ vào những thứ như RVM . Điều đó hoàn toàn đúng khi phát triển Ruby. Đi trước và sử dụng đó.

Tuy nhiên, nhiều người trong chúng ta chỉ muốn một số nhị phân đó xảy ra để được phân phối như một viên ngọc (ví dụ fakes3, cocoapods, xcpretty...). Tôi chắc chắn không muốn bận tâm đến việc quản lý một viên hồng ngọc riêng biệt. Dưới đây là các tùy chọn nhanh hơn của bạn:

Tùy chọn 1: Tiếp tục sử dụng sudo

Sử dụng sudocó lẽ là tốt nếu bạn muốn các công cụ này được cài đặt trên toàn cầu.

Vấn đề là các tệp nhị phân này được cài đặt vào /usr/bin, nằm ngoài giới hạn kể từ El Capitan. Tuy nhiên, bạn có thể cài đặt chúng vào /usr/local/binthay thế. Đó là nơi Homebrew cài đặt công cụ của nó, vì vậy nó có thể đã tồn tại.

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

Đá quý sẽ được cài đặt vào /usr/local/binvà mọi người dùng trên hệ thống của bạn đều có thể sử dụng chúng nếu nó nằm trong PATH của họ .

Tùy chọn 2: Cài đặt trong thư mục nhà của bạn (không có sudo)

Sau đây sẽ cài đặt đá quý vào ~/.gemvà đặt nhị phân vào ~/bin(sau đó bạn nên thêm vào PATH).

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

Làm cho nó mặc định

Dù bằng cách nào, bạn có thể thêm các tham số này vào ~/.gemrcđể bạn không phải nhớ chúng:

gem: -n/usr/local/bin

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

hoặc là

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

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

( Mẹo: Bạn cũng có thể tham gia --no-documentđể bỏ qua việc tạo tài liệu dành cho nhà phát triển Ruby.)


Cảm ơn bạn rất nhiều! Tôi đã vật lộn với các phiên bản mới của brew và ruby ​​nhưng vẫn không thể vượt qua vấn đề / usr / bin. Chỉ định đường dẫn mong muốn khi chạy gem installgiải quyết vấn đề.
Daniel Saidi

Các .gemrcnên có gem: -n /usr/local/bin(cần một không gian sau khi -n).
Paul Schreiber

@PaulSchreiber Vâng, tôi đã sử dụng nó mà không có dung lượng trong năm tháng nay. :) Bạn có chắc không?
nschum

2
Cộng 1 cho Tùy chọn # 2, đây là một lựa chọn khả thi và an toàn nếu bạn chỉ muốn những tệp nhị phân đó không có Ruby riêng. Thư mục nhà của chúng tôi là nơi hoàn hảo cho các viên đá quý được thêm vào, và một tinh chỉnh nhanh để PATH làm cho chúng có thể truy cập được. Tôi không thể đề xuất Lựa chọn số 1 vì ai đó cuối cùng sẽ ghi đè lên một viên đá quý và phá vỡ hệ thống mã tích hợp Ruby hoặc Apple sử dụng nó, và sau đó họ sẽ hỏi một câu hỏi khác về SO về cách khắc phục.
Tin Man

1
Đây là một câu trả lời tuyệt vời, nhưng có thể lỗi thời. Trên Sierra, tùy chọn tôi cần là --install-dir / usr / local / bin
Ryan Ballantyne

107

Trong trường hợp của tôi, tôi đã phải cài đặt lại Ruby bằng cách sử dụng Brew . Điều đó dường như đã giải quyết vấn đề khi tôi có thể cài đặt đá quý một lần nữa.

brew install ruby

Sau này, bạn cần đăng xuất và đăng nhập lại, bằng đồ họa hoặc chỉ cần khởi động lại thiết bị đầu cuối của bạn.


Làm việc tốt cho tôi! Tôi cho rằng nó sẽ loại bỏ bất kỳ sự kỳ lạ nào trong bản cài đặt ruby ​​kèm theo ... IMO đây là giải pháp tốt nhất.
n13

Bạn có thể biết ruby ​​nào đang được chạy với `` `which -a ruby` `` Trên máy của tôi có: `` `$ which -a ruby ​​/ usr / local / bin / ruby ​​/ usr / local / bin / ruby ​​/ usr / bin / ruby ​​`` `Tại sao / usr / local / bin lại ở trên PATH hai lần - có vẻ như brew install rubyđặt nó ở đó, ngay cả khi nó đã ở đó. Có lẽ ruby ​​in / usr / local được cấu hình để cài đặt gem của nó ở một vị trí không cần quyền truy cập root (thực sự có ý nghĩa hoàn hảo).
WallStProg

7
PS Bạn cần đăng xuất và đăng nhập lại (thông qua Terminal) nếu không gem installsẽ vẫn thất bại.
WallStProg

Làm việc tốt cho tôi. Tôi kết hợp câu trả lời được chấp nhận với câu trả lời này. Cảm ơn cả hai bạn
youssman

1
Bạn không cần phải đăng xuất và đăng nhập lại. Chỉ cần chạy rehashđể đảm bảo vỏ của bạn nhận ra rằng có một cái mới rubytrước đó trên $PATH. Ngay cả điều này sẽ không cần thiết trong trường hợp bạn chưa chạy rubytrong phiên shell.
Radon Rosborough

38

Đó là do chức năng bảo mật mới của OS X "El Capitan". Hãy thử thêm --user-installthay vì sử dụng sudo:

$ gem install *** --user-install

Ví dụ: nếu bạn muốn cài đặt fake3, chỉ cần sử dụng:

$ gem install fake3 --user-install

Đúng! Cảm ơn bạn rất nhiều!
Louis Magnotti

Sau khi dành 30 phút với phương pháp sản xuất bia, đóng cửa thiết bị đầu cuối, vv cuối cùng, giải pháp này đã hoạt động vào ngày 10.10.5 nhưng vẫn không chắc tại sao phương pháp sản xuất bia không hiệu quả. Vui lòng làm rõ. mà ruby ​​post brew install / usr / bin / ruby
vikramvi

1
Bây giờ, sự cố đã xảy ra khi cài đặt gem redcarpet -v '3.3.4' - lỗi ném người cài đặt cài đặt CẢNH BÁO: Bạn không có /Users/user_name/.gem/ruby/2.0.0/bin trong PATH, gem của bạn thực thi sẽ không chạy. Trước đó tôi đã không nhận được lỗi này
vikramvi

1
stackoverflow.com/questions/19579392/ , điều này đã giúp tôi giải quyết vấn đề cuối cùng
vikramvi


19

Bạn phải cập nhật Xcode lên bản mới nhất (v7.0.1) và mọi thứ sẽ hoạt động như bình thường.

Nếu sau khi bạn cài đặt Xcode mới nhất mà vẫn không hoạt động, hãy thử cài đặt gem theo cách này:

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

Ví dụ:

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

10

Có vẻ như khi nâng cấp lên OS X El Capitain, thư mục / usr / local được sửa đổi theo nhiều cách:

  1. quyền của người dùng được đặt lại (đây cũng là vấn đề đối với những người sử dụng Homebrew)
  2. nhị phân và symlink có thể đã bị xóa hoặc thay đổi

[Chỉnh sửa] Ngoài ra còn có một việc cần làm sơ bộ: nâng cấp Xcode ...

Giải pháp cho # 1:

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

Điều này sẽ sửa các quyền trên /usr/localthư mục mà sau đó sẽ giúp cả hai gem installbrew install|link|...các lệnh hoạt động đúng.

Giải pháp cho # 2:

Các vấn đề dựa trên Ruby

Đảm bảo bạn đã sửa các quyền của /usr/localthư mục (xem # 1 ở trên)

Trước tiên hãy thử cài đặt lại đá quý của bạn bằng cách sử dụng:

sudo gem install <gemname>

Lưu ý rằng nó sẽ cài đặt phiên bản mới nhất của đá quý được chỉ định.

Nếu bạn không muốn đối mặt với các vấn đề tương thích ngược, tôi khuyên bạn trước tiên nên xác định phiên bản của loại đá quý nào bạn muốn nhận và sau đó cài đặt lại nó với -v version. Xem một ví dụ dưới đây để đảm bảo rằng hệ thống sẽ không có phiên bản mới của capistrano.

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

Các vấn đề dựa trên bia

Cập nhật bia và nâng cấp công thức của bạn

$ brew update
$ brew upgrade

Bạn cũng có thể cần phải liên kết lại một số trong số họ bằng tay

$ brew link <formula>

3

Như đã nói, vấn đề này xuất phát từ chức năng bảo mật của Mac OSX kể từ "El Capitan".

Sử dụng hệ thống mặc định Ruby, quá trình cài đặt xảy ra trong /Library/Ruby/Gems/2.0.0thư mục không có sẵn cho người dùng và báo lỗi.

Bạn có thể xem các tham số môi trường Ruby của bạn bằng lệnh

$ gem env

Có HƯỚNG DẪN CÀI ĐẶT và HƯỚNG DẪN CÀI ĐẶT NGƯỜI DÙNG. Để sử dụng thư mục cài đặt người dùng thay vì thư mục cài đặt mặc định, bạn có thể sử dụng --user-installtham số thay vì sử dụng sudokhông bao giờ là cách làm được khuyến nghị.

$ gem install myGemName --user-install

Không nên có bất kỳ vấn đề quyền nào nữa trong quy trình. Các đá quý sau đó được cài đặt trong thư mục người dùng:~/.gem/Ruby/2.0.0/bin

Nhưng để làm cho đá quý được cài đặt có sẵn, thư mục này nên có sẵn trong đường dẫn của bạn. Theo faq của Ruby , bạn có thể thêm dòng sau vào ~/.bash_profilehoặc~/.bashrc

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

Sau đó đóng và tải lại thiết bị đầu cuối của bạn hoặc tải lại .bash_profilehoặc .bashrc( . ~/.bash_profile)


2

Đây là giải pháp mà tôi đã sử dụng:

Lưu ý: cách khắc phục này dành cho la bàn khi tôi viết nó cho một câu hỏi SO khác, nhưng tôi đã sử dụng cùng một quy trình để khôi phục chức năng cho tất cả các quy trình đầu cuối, rõ ràng các viên ngọc bạn đang cài đặt là khác nhau, nhưng quá trình này là như nhau.

Tôi gặp vấn đề tương tự. Đó là do Apple triển khai Bảo vệ toàn vẹn hệ thống (SIP). Trước tiên bạn phải vô hiệu hóa ...

Khởi động lại trong chế độ phục hồi:

Khởi động lại và giữ Command + R cho đến khi bạn thấy logo quả táo.

Sau khi khởi động, chọn Tiện ích> Thiết bị đầu cuối từ thanh trên cùng.

kiểu: csrutil disable

sau đó gõ: reboot

Sau khi khởi động lại

Mở terminal sao lưu và nhập các lệnh:

sudo gem uninstall bundler

sudo gem install bundler

sudo gem install compass

sudo gem install sass

sudo gem update --system

Các viên đá quý không thành công cần phải được sửa, vì vậy, mỗi viên đá phải làm như sau:

Trên máy của tôi, đây là phần phụ thuộc đầu tiên không hoạt động nên tôi liệt kê nó :

sudo gem pristine ffi --version 1.9.3

Tiến hành thông qua danh sách các đá quý cần được sửa chữa. Trong tất cả những gì bạn đang xem xét khoảng 10 phút để sửa nó, nhưng bạn sẽ có các lệnh đầu cuối để la bàn hoạt động.

Ảnh chụp màn hình


2

Nếu đá quý bạn đang cố cài đặt yêu cầu thư viện xml, thì hãy thử điều này:

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

Cụ thể, tôi gặp sự cố khi cài đặt nokogiri gem v 1.6.8 trên OS X El Capitan

và điều này cuối cùng đã làm việc cho tôi:

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

Để đảm bảo bạn đã cài đặt libxml2 và libxslt, bạn có thể làm:

brew install libxml2 libxslt
brew install libiconv

và sau đó kiểm tra để đảm bảo bạn đã cài đặt các công cụ dòng lệnh xcode:

xcode-select --install 

nên trả lại lỗi này:

xcode-select: error: command line tools are already installed, use "Software Update" to install updates

1

Cài đặt lại RVM làm việc cho tôi, nhưng sau đó tôi phải cài đặt lại tất cả các viên đá quý của mình:

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

0

Tôi đã gặp vấn đề tương tự sau khi cài đặt El Capitan, tôi đã cố gắng cài đặt sass và la bàn vào một dự án symfony, lệnh sau trả về lỗi sau:

$ sudo đá quý cài đặt la bàn

LRI: Lỗi khi cài đặt la bàn: LRI: Không thể tạo tiện ích mở rộng riêng cho đá quý.

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

đang kiểm tra ffi.h ... / System / L Library / Frameworks / Repy.framework / Vionsions / 2.0 / usr / lib / ruby ​​/ .0.0 / mkmf.rb: 44: in `try_do ': Trình biên dịch không tạo được tập tin thực thi. (Lỗi runtime)

Vì vậy, sau đó tôi đã cố gắng cài đặt sass với: $ sudo gem install sass

Nhận được thông báo lỗi tương tự, sau khi một số googling tôi quản lý để cài đặt sass bằng lệnh sau:

$ sudo gem cài đặt -n / usr / local / bin sass

Ở trên làm việc cho tôi với cài đặt sass nhưng không hoạt động để cài đặt la bàn. Tôi đọc được rằng ai đó ở đâu đó đã mở một thể hiện của xcode rồi đóng lại, sau đó chạy thành công lệnh tương tự sau đó đã hoạt động với họ. Tôi đã cố mở xcode nhưng được nhắc với một thông báo nói rằng phiên bản xcode được cài đặt không tương thích với El Capitan. Vì vậy, sau đó tôi đã cập nhật xcode từ cửa hàng ứng dụng, chạy lại lệnh sau mà lần này đã chạy thành công:

$ sudo gem cài đặt -n / usr / local / bin la bàn

Sau đó tôi đã có thể chạy $ la bàn init

Bây giờ tôi có tất cả các viên đá quý của mình hoạt động và có thể tiến hành xây dựng một số thứ đáng yêu :)


0

Tôi phải rm -rf ./vendorchạy bundle installlại.


-1

Tôi không thích cài đặt công cụ với sudo. một khi bạn bắt đầu với sudo, bạn không thể dừng lại ..

hãy thử cấp quyền cho thư mục Gems.

sudo chown -R $(whoami) /Library/Ruby/Gems/2.0.0

2
Đừng thay đổi quyền sở hữu hệ thống đá quý Ruby. Điều đó có thể gây ra vấn đề khi Mac OS cố gắng cập nhật mọi thứ.
Tin Man

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.