ไม่สามารถติดตั้งอัญมณีบน OS X“ El Capitan”


182

ฉันไม่สามารถติดตั้งและรันfakes3gem บน El Capitan Beta 5 ได้

ฉันเหนื่อย:

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

จากนั้นฉันก็ลองทำตามวิธี cocoapods มันใช้งานได้กับ cocoapods แต่ไม่ใช่สำหรับ 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.

3
อย่าใช้sudoเพื่อติดตั้ง Ruby หรือเปลี่ยนพลอย ใช้rbenvหรือRVM แทนเพื่อติดตั้งและจัดการ Ruby อ่านและปฏิบัติตามคำแนะนำในเว็บไซต์ของตน และไม่ว่าในกรณีใดหลังจากติดตั้งอย่าใช้sudoจนกว่าคุณจะเข้าใจสิ่งที่เปลี่ยนแปลงและเหตุผลที่คุณต้องการทำ
ชายดีบุก

คำตอบ:


333

Disclaimer: @theTinMan และนักพัฒนาทับทิมอื่น ๆ มักจะชี้ให้เห็นไม่ได้ที่จะใช้sudoเมื่อติดตั้งอัญมณีและชี้ไปที่สิ่งที่ต้องการRVM นั่นเป็นเรื่องจริงเมื่อทำการพัฒนาทับทิม ไปข้างหน้าและใช้สิ่งนั้น

แต่ส่วนมากของเราเพียงแค่ต้องการไบนารีบางอย่างที่เกิดขึ้นจะกระจายเป็นอัญมณี (เช่นfakes3, cocoapods, xcpretty... ) แน่นอนว่าฉันไม่ต้องการรบกวนการจัดการทับทิมแยกต่างหาก นี่คือตัวเลือกที่รวดเร็วกว่าของคุณ:

ตัวเลือกที่ 1: ใช้ sudo ต่อไป

การใช้sudoอาจดีถ้าคุณต้องการให้เครื่องมือเหล่านี้ติดตั้งทั่วโลก

ปัญหาคือมีการติดตั้งไบนารีเหล่านี้ลง/usr/binซึ่งเป็นขีด จำกัดตั้งแต่ El Capitan อย่างไรก็ตามคุณสามารถติดตั้งลงใน/usr/local/binแทน นั่นคือสิ่งที่Homebrewติดตั้งเนื้อหาดังนั้นจึงอาจมีอยู่แล้ว

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

อัญมณีจะได้รับการติดตั้งลง/usr/local/binและใช้งานในระบบของคุณทุกคนสามารถใช้พวกเขาถ้ามันอยู่ในพวกเขาเส้นทาง

ตัวเลือก 2: ติดตั้งในโฮมไดเร็กตอรี่ของคุณ (โดยไม่มี sudo)

ต่อไปนี้จะติดตั้งอัญมณีใน~/.gemและใส่ไบนารี่~/bin(ซึ่งคุณควรเพิ่มในของคุณPATH)

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

ทำให้เป็นค่าเริ่มต้น

ไม่ว่าจะด้วยวิธีใดคุณสามารถเพิ่มพารามิเตอร์เหล่านี้ในของคุณ~/.gemrcเพื่อให้คุณไม่ต้องจำพารามิเตอร์เหล่านี้:

gem: -n/usr/local/bin

กล่าวคือ echo "gem: -n/usr/local/bin" >> ~/.gemrc

หรือ

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

กล่าวคือ echo "gem: --user-install -n~/bin" >> ~/.gemrc

( เคล็ดลับ:คุณสามารถโยน--no-documentเพื่อข้ามการสร้างเอกสารสำหรับผู้พัฒนา Ruby ได้)


ขอบคุณมาก! ฉันได้ต่อสู้กับเวอร์ชันใหม่ของการชงและทับทิม แต่ก็ยังไม่สามารถผ่านปัญหา / usr / bin การระบุเส้นทางที่ต้องการเมื่อเรียกใช้gem installแก้ไขปัญหาได้
Daniel Saidi

.gemrcควรมีgem: -n /usr/local/bin(ต้องมีพื้นที่ว่างหลังจาก -n ก)
Paul Schreiber

@ PaulSchreiber ดีฉันได้ใช้มันโดยไม่ต้องมีช่องว่างเป็นเวลาห้าเดือนแล้ว :) คุณแน่ใจไหม?
nschum

2
บวก 1 สำหรับตัวเลือก # 2 ซึ่งเป็นทางเลือกที่ปลอดภัยและเป็นประโยชน์หากคุณต้องการไบนารีเหล่านั้นโดยไม่มี Ruby แยกต่างหาก ไดเรกทอรีบ้านของเราเป็นสถานที่ที่สมบูรณ์แบบสำหรับอัญมณีที่เพิ่มเข้ามาและการปรับแต่งอย่างรวดเร็วไปยัง PATH ทำให้สามารถเข้าถึงได้ ฉันไม่สามารถแนะนำตัวเลือก # 1 ได้เพราะใครบางคนจะเขียนทับอัญมณีและทำลายรหัสระบบในตัวของ Ruby หรือ Apple ที่ใช้แล้วพวกเขาจะถามคำถามอื่นเกี่ยวกับวิธีการแก้ไข
Tin Man

1
นี่เป็นคำตอบที่ยอดเยี่ยม แต่อาจล้าสมัย ในเซียร่าตัวเลือกที่ฉันต้องการคือ --install-dir / usr / local / bin
Ryan Ballantyne

107

ในกรณีของฉันฉันจะต้องติดตั้งใหม่ทับทิมใช้เบียร์ ที่ดูเหมือนว่าจะมีการแก้ไขปัญหาที่ฉันสามารถติดตั้งอัญมณีอีกครั้ง

brew install ruby

หลังจากนี้คุณต้องออกจากระบบและลงชื่อเข้าใช้ใหม่ทั้งแบบกราฟิกหรือเพิ่งรีสตาร์ทเครื่อง


ทำงานได้ดีสำหรับฉัน! ฉันคิดว่ามันจะกำจัดความแปลกประหลาดใด ๆ ในการติดตั้งทับทิมรวม ... IMO นี้เป็นทางออกที่ดีที่สุด
n13

คุณสามารถบอกได้ว่าทับทิมใดถูกเรียกใช้ด้วย `` `ซึ่ง -a ruby ​​''` บนเครื่องของฉันที่ให้: `` $ $ ที่ -a ruby ​​/ usr / local / bin / ruby ​​/ usr / local / bin / ruby ​​/ usr / bin / ruby ​​`` `สาเหตุที่ / usr / local / bin อยู่บน PATH สองครั้ง - ดูเหมือนว่าbrew install rubyจะใส่ไว้ที่นั่นแม้ว่าจะมีอยู่แล้วก็ตาม สันนิษฐานว่าทับทิมใน / usr / local ได้รับการกำหนดค่าให้ติดตั้งอัญมณีในตำแหน่งที่ไม่ต้องการการเข้าถึงรูท
WallStProg

7
ป.ล. คุณต้องออกจากระบบและลงชื่อกลับเข้าใช้งาน (ผ่าน Terminal) มิเช่นgem installนั้นจะยังไม่สำเร็จ
WallStProg

ทำงานได้ดีสำหรับฉัน ฉันรวมคำตอบที่ยอมรับกับคำตอบนี้เข้าด้วยกัน ขอบคุณทั้งคู่
youssman

1
คุณไม่ต้องออกจากระบบและลงชื่อเข้าใช้อีกครั้ง เพียงแค่เรียกใช้rehashเพื่อให้แน่ใจว่าได้ตระหนักถึงเปลือกของคุณว่ามีใหม่ก่อนหน้านี้ในruby $PATHแม้สิ่งนี้จะไม่จำเป็นในสถานการณ์ที่คุณยังไม่ได้ทำงานrubyในเซสชันเชลล์
Radon Rosborough

38

นั่นเป็นเพราะฟังก์ชั่นความปลอดภัยใหม่ของ OS X "El Capitan" ลองเพิ่ม--user-installแทนการใช้ sudo:

$ gem install *** --user-install

ตัวอย่างเช่นหากคุณต้องการติดตั้ง fake3 เพียงใช้:

$ gem install fake3 --user-install

ใช่ ขอบคุณมาก!
Louis Magnotti

หลังจากใช้เวลา 30 นาทีกับวิธีการชงการปิดเทอร์มินัล ฯลฯ ในที่สุดโซลูชันนี้ทำงานใน 10.10.5 แต่ก็ยังไม่แน่ใจว่าทำไมวิธีการชงไม่ได้ผล กรุณาชี้แจง ซึ่งติดตั้ง post ruby ​​Brew / usr / bin / ruby
vikramvi

1
ว้าวตอนนี้ปัญหาคืออัญมณีกลับติดตั้ง redcarpet -v '3.3.4' - ข้อผิดพลาดการขว้างปาติดตั้งของผู้ใช้คำเตือน: คุณไม่มี /Users/user_name/.gem/ruby/2.0.0/bin ใน PATH อัญมณีของคุณ executables จะไม่ทำงาน ก่อนหน้านี้ฉันไม่ได้รับข้อผิดพลาดนี้
vikramvi

1
stackoverflow.com/questions/19579392/…สิ่งนี้ช่วยฉันในการแก้ไขปัญหาในที่สุด
vikramvi


19

คุณต้องอัปเดต Xcode เป็นเวอร์ชั่นใหม่ล่าสุด (v7.0.1) และทุกอย่างจะทำงานได้ตามปกติ

หากหลังจากคุณติดตั้ง Xcode ใหม่แล้วและยังไม่สามารถใช้งานได้ลองติดตั้ง gem ด้วยวิธีนี้:

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

ตัวอย่างเช่น:

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

ดูเหมือนว่าเมื่ออัปเกรดเป็น OS X El Capitain แล้วไดเรกทอรี / usr / local จะได้รับการแก้ไขได้หลายวิธี:

  1. สิทธิ์ผู้ใช้ถูกรีเซ็ต (นี่เป็นปัญหาสำหรับผู้ที่ใช้ Homebrew)
  2. ไบนารีและ symlink อาจถูกลบหรือแก้ไข

[แก้ไข] นอกจากนี้ยังมีสิ่งที่ต้องทำเบื้องต้น: อัปเกรด Xcode ...

โซลูชันสำหรับ # 1:

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

นี่จะแก้ไขการอนุญาตใน/usr/localไดเรกทอรีซึ่งจะช่วยให้ทั้งสองgem installและbrew install|link|...คำสั่งทำงานอย่างถูกต้อง

ทางออกที่ # 2:

ปัญหาเกี่ยวกับทับทิม

ตรวจสอบให้แน่ใจว่าคุณได้แก้ไขสิทธิ์ของ/usr/localไดเรกทอรี (ดู # 1 ด้านบน)

ก่อนอื่นให้ลองติดตั้งอัญมณีของคุณใหม่โดยใช้:

sudo gem install <gemname>

โปรดทราบว่ามันจะติดตั้งอัญมณีล่าสุดที่ระบุ

-v versionหากคุณไม่ต้องการที่จะเผชิญปัญหาความเข้ากันได้ย้อนหลังผมขอแนะนำให้คุณตรวจสอบรุ่นที่อัญมณีที่คุณต้องการที่จะได้รับแล้วติดตั้งด้วย ดูตัวอย่างด้านล่างเพื่อให้แน่ใจว่าระบบจะไม่ได้รับ capistrano รุ่นใหม่

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

ปัญหาเกี่ยวกับ Brew

อัปเดตชงและอัพเกรดสูตรของคุณ

$ brew update
$ brew upgrade

คุณอาจต้องเชื่อมโยงบางรายการใหม่ด้วยตนเอง

$ brew link <formula>

3

ดังที่ได้กล่าวไปแล้วปัญหามาจากฟังก์ชั่นความปลอดภัยของ Mac OSX ตั้งแต่ "El Capitan"

การใช้ทับทิมระบบเริ่มต้นกระบวนการติดตั้งจะเกิดขึ้นใน/Library/Ruby/Gems/2.0.0ไดเรกทอรีที่ผู้ใช้ไม่สามารถใช้งานได้และทำให้เกิดข้อผิดพลาด

คุณสามารถดูพารามิเตอร์สภาพแวดล้อม Ruby ของคุณด้วยคำสั่ง

$ gem env

มีไดเรกทอรีการติดตั้งและไดเรกทอรีการติดตั้งของผู้ใช้ ในการใช้ไดเรกทอรีการติดตั้งของผู้ใช้แทนที่จะเป็นไดเรกทอรีการติดตั้งเริ่มต้นคุณสามารถใช้--user-installพารามิเตอร์แทนการใช้sudoซึ่งไม่ใช่วิธีที่แนะนำ

$ gem install myGemName --user-install

ไม่ควรมีปัญหาสิทธิ์ใด ๆ อีกต่อไปในกระบวนการ อัญมณีจะถูกติดตั้งในไดเรกทอรีผู้ใช้:~/.gem/Ruby/2.0.0/bin

แต่เพื่อให้อัญมณีที่ติดตั้งพร้อมใช้งานอยู่ไดเรกทอรีนี้ควรพร้อมใช้งานในเส้นทางของคุณ ตามคำถามที่พบบ่อยของ Rubyคุณสามารถเพิ่มบรรทัดต่อไปนี้ใน~/.bash_profileหรือ~/.bashrc

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

จากนั้นปิดและโหลดเทอร์มินัลของคุณหรือโหลดของคุณ.bash_profileหรือ.bashrc( . ~/.bash_profile)


2

นี่คือทางออกที่ฉันได้ใช้:

หมายเหตุ: การแก้ไขนี้ใช้สำหรับเข็มทิศอย่างที่ฉันเขียนไว้ในคำถาม SO อื่น แต่ฉันได้ใช้กระบวนการเดียวกันเพื่อกู้คืนการทำงานของกระบวนการเทอร์มินัลทั้งหมดแน่นอนว่าอัญมณีที่คุณกำลังติดตั้งนั้นแตกต่างกัน แต่กระบวนการก็เหมือนกัน

ฉันมีปัญหาเดียวกัน มันเกิดจาก Apple ที่ใช้การป้องกันความสมบูรณ์ของระบบ (SIP) คุณต้องปิดการใช้งานก่อน ...

รีบูตในโหมดการกู้คืน:

รีบูตและกดCommand + Rค้างไว้จนกว่าคุณจะเห็นโลโก้ Apple

เมื่อบูทแล้วให้เลือกUtilities> Terminalจากแถบด้านบน

พิมพ์: csrutil disable

จากนั้นพิมพ์: reboot

รีบูทครั้งเดียว

เปิดเทอร์มินัลสำรองและป้อนคำสั่ง:

sudo gem uninstall bundler

sudo gem install bundler

sudo gem install compass

sudo gem install sass

sudo gem update --system

พลอยแต่ละอันที่ล้มเหลวจำเป็นต้องได้รับการแก้ไขดังนั้นสำหรับแต่ละอย่างที่ทำต่อไปนี้:

ในเครื่องของฉันนี่เป็นการพึ่งพาครั้งแรกที่ใช้งานไม่ได้ดังนั้นฉันจึงแสดงรายการไว้ :

sudo gem pristine ffi --version 1.9.3

ดำเนินการตามรายการอัญมณีที่ต้องซ่อมแซม ในทุกสิ่งที่คุณกำลังดูประมาณ 10 นาทีเพื่อแก้ไข แต่คุณจะมีคำสั่งเทอร์มินัลสำหรับการทำงานของเข็มทิศ

ภาพหน้าจอ


2

หาก gem ที่คุณพยายามติดตั้งต้องการไลบรารี xml ให้ลองสิ่งนี้:

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

โดยเฉพาะฉันพบปัญหาขณะติดตั้ง nokogiri gem v 1.6.8 บน OS X El Capitan

และในที่สุดก็ใช้งานได้สำหรับฉัน:

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

เพื่อให้แน่ใจว่าคุณติดตั้ง libxml2 และ libxslt แล้วคุณสามารถทำได้:

brew install libxml2 libxslt
brew install libiconv

จากนั้นตรวจสอบเพื่อให้แน่ใจว่าคุณติดตั้งเครื่องมือบรรทัดคำสั่ง xcode แล้ว:

xcode-select --install 

ควรคืนข้อผิดพลาดนี้:

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

1

การติดตั้ง RVM อีกครั้งเหมาะสำหรับฉัน แต่ฉันต้องติดตั้งพลอยทั้งหมดอีกครั้งหลังจากนั้น:

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

0

ฉันพบปัญหาเดียวกันหลังจากติดตั้ง El Capitan ฉันพยายามติดตั้ง sass และ compass เป็นโครงการ symfony คำสั่งต่อไปนี้กลับข้อผิดพลาดต่อไปนี้:

$ sudo gem ติดตั้งเข็มทิศ

ข้อผิดพลาด: เกิดข้อผิดพลาดในการติดตั้งเข็มทิศ: ข้อผิดพลาด: ไม่สามารถสร้างส่วนขยายดั้งเดิมของอัญมณี

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

กำลังตรวจหา ffi.h ... /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/mkmf.rb:434:in `try_do ': คอมไพเลอร์ล้มเหลวในการสร้าง ไฟล์ปฏิบัติการ (การทำงานผิดพลาด)

ดังนั้นฉันจึงลองติดตั้ง sass ด้วย: $ sudo gem install sass

มีข้อความแสดงข้อผิดพลาดเดียวกันหลังจาก googling ฉันจัดการเพื่อติดตั้ง sass โดยใช้คำสั่งต่อไปนี้:

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

ข้างต้นทำงานให้ฉันด้วยการติดตั้ง sass แต่ไม่ได้ผลสำหรับการติดตั้งเข็มทิศ ฉันอ่านว่ามีบางคนที่เปิดอินสแตนซ์ของ xcode แล้วปิดอีกครั้งจากนั้นจึงรันคำสั่งเดียวกันหลังจากที่ทำงานให้สำเร็จ ฉันพยายามที่จะเปิด xcode แต่ได้รับแจ้งพร้อมข้อความแจ้งว่าเวอร์ชันของ xcode ที่ติดตั้งนั้นไม่สามารถทำงานร่วมกับ El Capitan ได้ ดังนั้นฉันจึงอัปเดต xcode จาก app store ให้รันคำสั่งต่อไปนี้อีกครั้งซึ่งครั้งนี้รันเสร็จเรียบร้อยแล้ว:

$ sudo gem install -n / usr / local / bin เข็มทิศ

ตอนนั้นฉันสามารถเรียกใช้ $ init init ได้

ตอนนี้ฉันมีพลอยทั้งหมดของฉันทำงานและสามารถดำเนินการต่อเพื่อสร้างสิ่งที่น่ารักบางอย่าง :)



-1

ฉันไม่ชอบติดตั้งเนื้อหาด้วย sudo เมื่อคุณเริ่มต้นด้วย sudo คุณจะหยุดไม่ได้ ..

ลองให้สิทธิ์กับไดเรกทอรี Gems

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

2
อย่าเปลี่ยนความเป็นเจ้าของระบบพลอยทับทิม ซึ่งอาจทำให้เกิดปัญหาเมื่อ Mac OS พยายามอัปเดตทุกอย่าง
Tin Man

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

ที่จะให้สิทธิ์กลับมา (Homebrew ติดตั้งทับทิมที่นั่น)


2
หากคุณเรียกใช้คำสั่งนี้และมันทำให้ข้อมูล MySQL ของคุณยุ่งเหยิงคุณจะต้องตั้งค่าการอนุญาตกลับคืน นี่คือวิธี stillatmylinux.com/not-every-linux-command-is-good-for-you
stillatmylinux
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.