วิธีติดตั้งอัญมณีหรืออัปเดต RubyGems หากล้มเหลวด้วยข้อผิดพลาดเกี่ยวกับการอนุญาต


559

ฉันกำลังพยายามติดตั้งอัญมณีโดยใช้gem install mygemหรืออัปเดตโดยใช้ RubyGems gem update --systemและล้มเหลวด้วยข้อผิดพลาดนี้:

ERROR:  While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

ใครบ้างมีความคิดวิธีแก้ปัญหานี้


5
นี่คือวิธีแก้ปัญหาของฉัน: stackoverflow.com/questions/34071868/ …
LanceP

2
ข้อผิดพลาดของฉันเกิดขึ้นเพราะฉันกำลังทำ: gem update cocoapods ถูกต้อง: sudo gem update cocoapods
Abhishek Thapliyal

60
sudo chown -R $USER /Library/Ruby/Gems/
vaskort

2
เพียงใช้คำสั่งนี้ใช้งานได้สำหรับฉัน: sudo gem ติดตั้ง mygem
Jayprakash Dubey

1
ฉันใช้เปลือก zsh และมันเป็นปัญหาเส้นทางใน ~ / .zshrc ฉันใช้บรรทัดนี้ในตอนท้ายของไฟล์และทำงานให้ฉัน: export PATH = "$ HOME / .rbenv / shims: $ PATH"
rosnk

คำตอบ:


317

คุณไม่มีสิทธิ์ในการเขียนลงในไดเรกทอรี /Lubit/Ruby/Gems/1.8

หมายความว่าคุณไม่ได้รับอนุญาตให้เขียน

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

แต่ฉันขอแนะนำให้คุณใช้rbenvหรือRVM แทนเพื่อจัดการ Ruby ที่แยกต่างหากติดตั้งลงใน sandbox ในโฮมไดเร็กตอรี่ของคุณเพื่อให้คุณสามารถปรับเปลี่ยน / พับ / แกนหมุน / เปลี่ยนได้โดยไม่ต้องกังวลว่าระบบของ Ruby

ระหว่างสองฉันใช้ rbenv แม้ว่าฉันเคยใช้ RVM มามากในอดีต rbenv ใช้วิธี "hands-off" เพิ่มเติมเพื่อจัดการการติดตั้ง Ruby ของคุณ RVM มีคุณสมบัติมากมายและมีประสิทธิภาพมาก แต่ผลที่ได้คือล่วงล้ำมากขึ้น ในกรณีใดกรณีหนึ่งให้อ่านเอกสารการติดตั้งสำหรับพวกเขาสองสามครั้งก่อนที่จะเริ่มติดตั้งแล้วแต่ว่าคุณจะเลือกอะไร


176
คุณไม่จำเป็นต้องใช้ห้องสมุดทับทิมแยกต่างหาก เพียงใส่ 'sudo' ต่อหน้าคุณตามที่ Michael แนะนำไว้ข้างต้น
serraosays

37
การเปลี่ยนความเป็นเจ้าของการติดตั้ง Ruby ของ Apple ไม่ใช่ความคิดที่ดีเนื่องจากการติดตั้ง / อัพเกรดระบบและ Disk Utility สามารถเปลี่ยน / ซ่อมแซมความเป็นเจ้าของและสิทธิ์ของไดเรกทอรีโดยอัตโนมัติ ที่จะทำให้ผู้ใช้หงุดหงิดและสามารถทำลายระบบปฏิบัติการและรหัสที่คาดว่าจะมีสิทธิ์ในการเขียน / เป็นเจ้าของไดเรกทอรีเหล่านั้น Apple ติดตั้งแอพที่ใช้ Ruby และคาดว่าจะมีเวอร์ชันหรือการทำงานที่แน่นอน ทำไมต้องกังวลเมื่อมันง่ายกว่าและปลอดภัยกว่าที่จะใช้ RVM หรือ rbenv และไม่ต้องกังวลกับมัน
Tin Man

203
สำหรับผู้ที่ชอบฉันที่ไม่ได้ทำทับทิมจริง ๆ และไม่ต้องการยุ่งรอบครึ่งชั่วโมงพยายามที่จะคิดออกว่าสิ่งที่ผลึกเหล่านี้คืออะไร brew install rubyจะแก้ปัญหาการพึ่งพาของคุณในวิธีที่สะอาดซึ่งไม่ได้ติดตั้งแอปเปิ้ล หากคุณได้รับsudoการอัปเดตในการติดตั้งครั้งแรกและกังวลเกี่ยวกับสิ่งที่คุณทำคุณควรจะสามารถยกเลิกได้ด้วย:cd /System/Library/Frameworks/Ruby.framework/Versions;sudo rm Current; sudo ln -s 1.8 Current;
Louis

21
" I did the sudo tangle and wound up modifying my pre-installed Ruby. I did your steps to try to fix the problem, but now when I do irb or ruby -v, I get command not found. What's going on and is there a fix" และนี้ก็จะเพิ่มน้ำหนักมากขึ้นว่าทำไมคนไม่ควรใช้หรือsudo chownเฮ้อ ....
ผู้ชายดีบุก

55
แก้ไข: ที่ El Captain หลังจากทำbrew install rubyเพียงปิด Terminal แล้วเปิดใหม่อีกครั้ง
Fmessina

421

ลองเพิ่ม--user-installแทนการใช้sudo:

gem install mygem --user-install

4
ฉันไม่รู้ว่าทำไมคำตอบของคุณไม่ได้โพสต์มาก่อน --user-installตัวเลือกที่ได้เห็นได้ชัดว่ารับรอบในขณะที่ ฉันขอให้คุณเขียนก่อนหน้านี้ =)
ไมเคิล - Where's Clay Shirky

7
สิ่งนี้ต้องไปด้านบน! การติดตั้งด้วย sudo หรือ su เป็นความคิดที่ไม่ดีเนื่องจากคุณบังคับใช้ระบบการอนุญาตบนโมดูลและแพคเกจที่ติดตั้งทั่วโลกอาจขัดแย้งกับแพ็คเกจอื่นที่ติดตั้งหรือการพึ่งพาโครงการอื่น ๆ การใช้ rbenv ต้องการให้คุณติดตั้งซอฟต์แวร์อื่นและเพิ่มชั้นของความซับซ้อน
Hubert Grzeskowiak

7
วิธีนี้ใช้งานได้ แต่เตือน: 'คำเตือน: คุณไม่มี /Users/<username>/.gem/ruby/2.0.0/bin ใน PATH ของคุณโปรแกรมปฏิบัติการอัญมณีจะไม่ทำงาน' ลิงค์ต่อไปนี้ให้คำแนะนำที่เป็นประโยชน์เกี่ยวกับวิธีการอัพเดทเส้นทางของคุณ (โดยไม่ต้องใช้ vi) hathaway.cc/post/69201163472/…
dawid

4
มันง่ายและมีเหตุผล เพิ่มเส้นทางทับทิมหากคุณไม่ได้อยู่ใน bashrc ของคุณif which ruby >/dev/null && which gem >/dev/null; then PATH="$(ruby -rubygems -e 'puts Gem.user_dir')/bin:$PATH" fi <br> ที่มา: guide.rubygems.org/faqs/#user-install
Inder Kumar Rathore

1
สิ่งนี้จะผิดพลาดกับระบบ (ติดตั้งทับทิม) ของ Apple หรือไม่?
Daniel Springer

93

คุณควรใช้ตัวจัดการเวอร์ชัน Ruby

การใช้งานอย่างถูกต้องจะป้องกันและสามารถแก้ไขปัญหาการอนุญาตของคุณเมื่อดำเนินการ gem updateคำสั่ง

ฉันแนะนำrbenv rbenv

อย่างไรก็ตามแม้ว่าคุณจะใช้ตัวจัดการเวอร์ชัน Ruby คุณก็ยังอาจได้รับข้อความแสดงข้อผิดพลาดเดียวกัน

หากคุณเป็นเช่นนั้นและคุณกำลังใช้ rbenv เพียงตรวจสอบว่า ~/.rbenv/shimsไดเร็กทอรีอยู่ก่อนพา ธ สำหรับระบบ Ruby

$ echo $PATH จะแสดงลำดับของเส้นทางการโหลดของคุณ

หากคุณพบว่าไดเรกทอรี shims ของคุณมาจากไดเรกทอรี Ruby bin ของระบบให้แก้ไข~/.bashrcไฟล์ของคุณและวางเป็นคำสั่งส่งออก PATH ครั้งล่าสุด: export PATH=$HOME/.rbenv/shims:$PATH

$ ruby -v แสดงเวอร์ชันของทับทิมที่คุณใช้

นี่แสดงให้เห็นว่าฉันกำลังใช้ Ruby เวอร์ชั่นระบบ (โดยปกติจะไม่ดี)

$ ruby -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]

$ rbenv global 1.9.3-p448 เปลี่ยนฉันเป็นรุ่นที่ใหม่กว่าติดตั้งไว้แล้ว (ดูข้อมูลอ้างอิงด้านล่าง)

นี่แสดงให้เห็นว่าฉันใช้ Ruby เวอร์ชั่นใหม่กว่า (น่าจะไม่ทำให้ Gem :: FilePermissionError)

$ ruby -v
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]

โดยทั่วไปคุณไม่จำเป็นต้องนำหน้าคำสั่ง gem ด้วย sudo หากคุณรู้สึกว่าจำเป็นต้องทำสิ่งนั้นอาจมีการกำหนดค่าผิดพลาด

สำหรับรายละเอียดเกี่ยวกับ rbenv ดูต่อไปนี้:


7
คุณไม่จำเป็นต้องยุ่งกับรหัสผ่านด้วยตัวคุณเองถ้าคุณใช้rbenvถ้าคุณทำตามคำแนะนำในการติดตั้ง Homebrewสิ่งที่คุณต้องทำคือเพิ่มลงeval "$(rbenv init -)"ใน shell config ของคุณและrbenvควรดูแลการตั้งค่าPATHสำหรับคุณ

ขอบคุณ ฉันลืม 'rbenv global' ดังนั้นฉันจึงยังใช้ระบบ ruby ​​อยู่และการติดตั้ง gem ล้มเหลว
Graham Perks

75

ทำไมคุณไม่ทำ:

sudo gem update --system

39
การติดตั้งพลอยในฐานะรูทไม่ใช่ความคิดที่ดี stackoverflow.com/questions/2119064/…
spuder

brew upgrade Error: Permission denied...ปัญหาที่มีกับ มันคงที่ ขอบคุณ!
Ostap Andrusiv

12
อย่าใช้ SUDO หากคุณต้องทำสิ่งนี้คุณทำสิ่งผิดพลาดในการตั้งค่าของคุณ โปรดใช้ rbenv หรือ rvm
Chris Hough

14
เหตุใดทุกคนจึงตอบปัญหาการอนุญาตให้ทิ้ง sudo ต่อหน้าคำสั่งเสมอ วิธีปฏิบัติที่ดีที่สุดนี้เป็นอย่างไร
Steven

hyh: qzc.xcodeproj ylgwhyh $ gem ติดตั้ง cocoapods ข้อผิดพลาด: ขณะดำเนินการ gem ... (Gem :: FilePermissionError) คุณไม่มีสิทธิ์เขียนสำหรับไดเรกทอรี /Library/Ruby/Gems/2.0.0
ylgwhyh

40

วิธีนี้จะแก้ไขปัญหาบนMacOs MojaveและMacOs Catalinaอย่างสะอาด:

brew install ruby

จากนั้นตั้งค่า GEM_HOME เป็นไดเรกทอรีผู้ใช้ของคุณ บนเครื่อง:

Bash:

echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc
echo 'export GEM_HOME=$HOME/gems' >> ~/.bashrc
echo 'export PATH=$HOME/gems/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

หรือถ้าเปิดZsh:

echo '# Install Ruby Gems to ~/gems' >> ~/.zshrc
echo 'export GEM_HOME=$HOME/gems' >> ~/.zshrc
echo 'export PATH=$HOME/gems/bin:$PATH' >> ~/.zshrc
source ~/.zshrc

2
คุณค้นพบสิ่งนี้ได้อย่างไร ทำงาน!
kuzdu

2
คุณเป็นผู้ชาย! สูงห้าใช้งานได้จริงเหมือนมีเสน่ห์ ขอบคุณมาก.
mrDinkelman

1
xcode-select --installเรื่องนี้ไม่ได้ทำงานสำหรับฉันจนกว่าฉันจะวิ่ง จำเป็นต้องมีการรวบรวมส่วนขยาย
Marc Perrin-Pelletier

ฉันรันสิ่งนี้และฉันต้องการที่จะสามารถรีเซ็ตการเปลี่ยนแปลงที่ทำโดยสิ่งเหล่านี้คุณรู้วิธีที่จะคืนค่าหรือไม่ @Fmessina
KarenAnne

สิ่งนี้ควรใช้งานได้: แก้ไขไฟล์~/.bashrcหรือของคุณ~/.zshrcลบ 3 บรรทัดที่เพิ่มแล้วเรียกใช้source ~/.bashrcคำสั่งอีกครั้ง
Fmessina

34

สำหรับฉันปัญหาเกิดจากการใช้ rbenvและลืมตั้งรุ่นที่เหมาะสมทั่วโลก

ดังนั้นฉันต้องตั้งค่าด้วย rbenv global xxx

ในกรณีของฉันฉันติดตั้ง2.0.0-p247ดังนั้นฉันจึงต้องออกคำสั่ง:

rbenv global 2.0.0-p247
rbenv rehash

จากนั้นทั้งหมดก็ทำงานได้ดี


3
สำหรับบรรดาของคุณอยู่แล้วโดยใช้ rbenv และเริ่มได้รับข้อผิดพลาดได้รับอนุญาตเมื่อติดตั้งอัญมณีหลังจากอัพเกรด OSX เป็นเวอร์ชันใหม่: คุณควรเริ่มต้นด้วยการตั้งค่ารุ่น rbenv ตัวอย่างและจากนั้นตามด้วยrbenv global 2.1.1 rbenv rehashตอนนี้รันgem installคำสั่งของคุณอีกครั้ง
njappboy

1
^ นี่ + รีสตาร์ทขั้ว
XåpplI'-I0llwlg'I -

1
นักสำรวจในอนาคต: rbenv rehash ได้ถูกคัดค้านแล้วgithub.com/rbenv/rbenv-gem-rehash
TCannadySF

ทำงานให้ฉันอย่างสมบูรณ์แบบ! มันเป็นสิ่งที่rbenv rehashฉันขาดหายไป
jamesmarkcook

น่าสังเกตว่ามันเป็นทับทิมระบบที่ขาดการอนุญาตและ rbenv จะใช้ทับทิมระบบหากไม่มีการตั้งค่าทับทิมทั่วโลก rbenv versionsนี้ได้รับการยืนยันด้วย
เดนนิส

23

คุณต้องแก้ไขเส้นทางของคุณ

เมื่อต้องการตรวจสอบว่าการแก้ไขนี้จะทำงานเรียกใช้ต่อไปนี้:

which gem

สิ่งนี้จะส่งออกไดเรกทอรีที่คุณไม่มีสิทธิ์:

/usr/bin/gem

ในการแก้ไขปัญหานี้ให้ทำตามขั้นตอนต่อไปนี้:

  1. กำหนดเส้นทางที่คุณต้องการคัดลอกไปยังโปรไฟล์ของคุณ:

    rbenv init -

    บรรทัดแรกของผลลัพธ์คือบรรทัดที่คุณต้องการคัดลอกไปยังโปรไฟล์ของคุณ:

    export PATH="/Users/justin/.rbenv/shims:${PATH}" #path that needs to be copied
    source "/usr/local/Cellar/rbenv/0.4.0/libexec/../completions/rbenv.zsh"
    rbenv rehash 2>/dev/null
    rbenv() {
      typeset command
      command="$1"
      if [ "$#" -gt 0 ]; then
        shift
      fi
    
      case "$command" in
      rehash|shell)
        eval `rbenv "sh-$command" "$@"`;;
      *)
        command rbenv "$command" "$@";;
      esac
    }
  2. คัดลอกพา ธ ไปยังโปรไฟล์ของคุณและบันทึก

  3. โหลดโปรไฟล์ของคุณใหม่ ( source ~/.zshenvสำหรับฉัน)

  4. rbenv rehashวิ่ง

ตอนนี้เมื่อคุณเรียกใช้which gemคุณควรได้รับเส้นทางท้องถิ่นที่คุณมีสิทธิ์:

/Users/justin/.rbenv/shims/gem

นั่นคือปัญหาในสถานการณ์ของฉัน คุณควรรวมeval "$(rbenv init -)"ไว้ใน~/.bash_profileการเปลี่ยนแปลงที่จำเป็นทั้งหมด
nyi

คำตอบที่ดีที่สุด โปรไฟล์ของฉันชื่อ. bash_profile และคุณสามารถเปิดไฟล์เช่นนี้: touch ~ / .bash_profile; เปิด ~ / .bash_profile และเพิ่มบรรทัดที่คุณกล่าวถึงในจุดที่ 1
CarmenA


17

สิ่งนี้ใช้ได้สำหรับฉัน นอกจากนี้หากคุณติดตั้งพลอยในฐานะรูทมาก่อนมันจะแก้ไขปัญหานั้นได้โดยเปลี่ยนความเป็นเจ้าของกลับมาหาคุณ (ควรใช้ความปลอดภัยที่ดีกว่า)

sudo chown -R `whoami` /Library/Ruby/Gems

1
ไม่ใหญ่! /Libraryห้ามเปลี่ยนสิทธิ์ในโฟลเดอร์ระบบอาจแตกหักในการอัพเดทในอนาคต (ขออภัยที่ตอบช้า)
Raptor

@Raptor ฉันกำลังแก้ไขสิทธิ์ในโฟลเดอร์ย่อยไม่ใช่ "/ Library" ในกรณีของฉันฉันติดตั้งพลอยเป็นรูตผิดพลาดดังนั้นฉันจึงต้องการยกเลิกสิ่งนั้น ไม่มีผลกระทบด้านลบที่ฉันสามารถคิดตามหลักวิชาการและไม่มีสิ่งใดที่ฉันสังเกตเห็น ฉันอยากรู้อยากเห็น - ทำไมคุณคิดว่านี่เป็นความคิดที่ไม่ดี?
thebiggestlebowski

พา ธ ใช้สำหรับระบบ การอัพเดตเพิ่มเติมของ macOS อาจไม่สมบูรณ์
Raptor

อัญมณีจะถูกติดตั้งตามค่าเริ่มต้นไปยังตำแหน่งนี้ มันใช้ไม่ได้เพราะมันถูกติดตั้งในฐานะ root (sudo) ผิดพลาดแทนที่จะเป็นผู้ใช้ปกติของฉัน ผลลัพธ์ของสิ่งที่ฉันทำนั้นเหมือนกับว่าฉันได้ติดตั้งเป็น $ USER ตั้งแต่แรก ฉันไม่เห็นอันตราย คำตอบอื่น ๆ ส่วนใหญ่ที่นี่แนะนำผลลัพธ์ / วิธีแก้ไขปัญหาเดียวกัน แต่วิธีต่าง ๆ เพื่อให้บรรลุ ฉันยังไม่เห็นปัญหา คุณกำลังบอกว่าพลอยไม่ควรติดตั้งใต้ / Library?
thebiggestlebowski

15

มีสองเส้นทาง: ใช้ rbenv หรือ RVM มีสูตรสำหรับทั้งสองด้านล่าง ก่อนที่คุณจะทำคุณอาจต้องการปิดการติดตั้งเอกสารในเครื่องสำหรับอัญมณี

echo "gem: --no-ri --no-rdoc" >> ~/.gemrc

แล้ว:

install rbenv

install ruby-build

วิ่ง:

rbenv install 2.1.2 (or whatever version you prefer)
rbenv global 2.1.2
gem update --system

สิ่งนี้จะติดตั้งระบบ gem เวอร์ชั่นล่าสุดในไดเรกทอรีท้องถิ่นของคุณ นั่นหมายความว่าคุณจะไม่เข้าไปยุ่งเกี่ยวกับการกำหนดค่าระบบ หากคุณกำลังถามคำถามนี้คุณไม่ควรยุ่งเกี่ยวกับความปลอดภัยของระบบและคุณจะต้องใช้เวลานานกว่าในการทำความเข้าใจกับปัญหาที่คุณพบมากกว่าแค่มีวิธีง่ายๆในการหลีกเลี่ยงปัญหาที่คุณเริ่ม เรียนรู้ InfoSec ในภายหลังเมื่อคุณทราบข้อมูลเพิ่มเติมเกี่ยวกับระบบปฏิบัติการและการเขียนโปรแกรม

สำหรับทางเลือกอื่นให้ใช้ 'RVM' แทน: เพื่อติดตั้ง rvm run:

rvm install 2.1.2
rvm use 2.1.2
gem update --system

สิ่งนี้มีผลลัพธ์เหมือนกันคุณจะจบลงด้วยระบบ Ruby และ Gem ที่ไม่รบกวนการทำงานของระบบ ไม่จำเป็นต้องใช้ Homebrew หรือระบบ lib-over-riding ฯลฯ


13

ฉันพบวิธีการนี้สำหรับsudoอัญมณีน้อย :

  1. brew install rbenv ruby-build
  2. sudo gem update --system
  3. เพิ่มการส่งออกไปยัง.bashrc:

    export RBENV_ROOT="$(brew --prefix rbenv)"
    export GEM_HOME="$(brew --prefix)/opt/gems"
    export GEM_PATH="$(brew --prefix)/opt/gems"
  4. และในที่สุดก็เพิ่มสิ่งนี้ลงใน~/.gemrc:

    gem: -n/usr/local/bin
  5. gem update --system


ฉันใช้brew install rebenv ruby-buildแล้วมีsystemหลังจากไดเรกทอรีของฉัน ความคิดใดที่ทำให้เกิดสิ่งนี้และจะกำจัดได้systemอย่างไร
7537247

13

ลองคำตอบของ nathanwhyก่อนใช้คำตอบดั้งเดิมของฉันด้านล่าง คำแนะนำของเขา--user-installควรจะบรรลุวัตถุประสงค์เดียวกันโดยไม่ต้องโคลนกับคุณ.bash_profileหรือกำหนดรุ่นทับทิมของคุณ


หากคุณไม่กังวลเกี่ยวกับทับทิมรุ่นใดรุ่นหนึ่งคุณสามารถข้ามตัวเลือกตัวจัดการสภาพแวดล้อม ruby ​​lift ที่หนักหน่วงและเพียงเพิ่มบรรทัดเหล่านี้ลงใน~/.bash_profile:

export GEM_HOME="$HOME/.gem/ruby/2.0.0"
export GEM_PATH="$HOME/.gem/ruby/2.0.0"

เส้นทางถูกขโมยจากผลลัพธ์ดั้งเดิมของgem env:

RubyGems Environment:
  - RUBYGEMS VERSION: 2.0.14
  - RUBY VERSION: 2.0.0
  - INSTALLATION DIRECTORY: /Library/Ruby/Gems/2.0.0
  - RUBY EXECUTABLE: /System/Library/.../2.0/usr/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - universal-darwin-14
  - GEM PATHS:
     - /Library/Ruby/Gems/2.0.0
     - /Users/mylogin/.gem/ruby/2.0.0 # <-- This guy, right here.
     - /System/Library/.../usr/lib/ruby/gems/2.0.0
  ...

ไม่sudoจำเป็นต้องใช้ไอเอ็นจีและคุณสามารถใช้ ruby ​​ที่ติดตั้งเรียบร้อยแล้วได้รับความอนุเคราะห์จาก Apple


3
+1: มันใช้งานได้ดีสำหรับฉัน ไม่ใช่ทุกคนที่เป็นผู้ดูแลระบบของเครื่องที่พวกเขาใช้และด้วยเหตุนี้ทุกคนไม่สามารถเข้าถึง 'sudo', 'chown' หรือเครื่องมือที่คล้ายกัน ในหลอดเลือดดำที่คล้ายกันผู้ใช้ควรตระหนักถึง "gem install --user-install" ซึ่งจะติดตั้ง gem ไปยังไดเรกทอรีในโฮมไดเร็กตอรี่ของผู้ใช้มากกว่าที่จะแชร์กับผู้ใช้ทุกคน
ผู้ชายบางคน

12

ฉันต้องทำ rbenv rehashนั้นมันจะชี้ไปที่ห้องสมุดอัญมณีท้องถิ่นของฉัน

ดูเหมือนว่าคุณมีผู้จัดการอัญมณีของคุณชี้ไปที่ System Library ดังนั้นแทนที่จะยุ่งกับสิทธิ์อนุญาตให้เทียบเท่ากับ "ทำใหม่" เพื่อให้ผู้จัดการของคุณได้รับสิ่งที่ชี้ไปในเครื่อง


3
นักสำรวจในอนาคต: rbenv rehash ได้ถูกคัดค้านแล้วgithub.com/rbenv/rbenv-gem-rehash
TCannadySF

12

เก่ากว่าและฉลาดกว่า

sudoอย่าทำในสิ่งที่ผมพูดนี่เพิ่งรู้ว่าต้องระวังเวลาที่คุณใช้ คุณอาจต้องการใช้สิ่งrbenvที่แยกออกจากงานที่คุณทำ


วิธี

เรียนรู้เกี่ยวกับ chown

ฉันไม่รู้ว่าคุณชอบบรรทัดคำสั่งหรือไม่ แต่สิ่งนี้จะทำให้การทำงานในโครงการใด ๆ ด้วยเครื่องมือใด ๆ ที่ติดตั้งแพ็คเกจไปยังระบบของคุณง่าย

chown เท่าที่ฉันสามารถบอกได้ว่าหมายถึงการเป็นเจ้าของการเปลี่ยนแปลง

เหตุผลที่ฉันมาหาคำตอบนี้เพราะgem installโยนข้อผิดพลาดมาที่ฉันวันนี้:

ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions into the /var/lib/gems/1.9.1 directory.

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

ในกรณีนี้มีเพียงสามสิ่งที่เราจำเป็นต้องรู้เพื่อแก้ปัญหา แต่chownมีประสิทธิภาพมากกว่าและให้ความยืดหยุ่นมากกว่าที่ฉันจะแสดงให้เห็นในตอนนี้ โปรดอ้างอิงแหล่งที่ด้านล่างสำหรับข้อมูลเพิ่มเติม

สองสิ่ง

  1. ชื่อผู้ใช้
  2. ไดเรกทอรี

หากคุณอยู่ในเปลือกพบว่าชื่อผู้ใช้เป็นเรื่องง่าย แค่มองที่พรอมต์ ฉันดูเหมือนว่า:

breadly@breadly-desktop:~\Desktop

@ผู้ใช้ปัจจุบันเป็นเพียงชื่อก่อนที่ เรารู้จักไดเรกทอรีจากข้อความแสดงข้อผิดพลาด แต่คุณมีสองทางเลือก คุณสามารถ จำกัด สิทธิ์ของคุณให้เป็นรุ่นปัจจุบันโดยใช้../gems/1.9.1หรือให้สิทธิ์การเขียนสำหรับตัวคุณเองสำหรับอัญมณีทุกรุ่นโดยใช้../gemsหรือให้ตัวเองเขียนได้รับอนุญาตสำหรับอัญมณีรุ่นทั้งหมดโดยใช้

คำสั่งเปลี่ยนความเป็นเจ้าของจะมีลักษณะเช่นนี้

chown -R $(whoami) /absolute/path/to/directory

-Rเป็นที่รู้จักกันเป็นธงและ-Rธงมักจะบอกว่าคำสั่งที่จะทำบางสิ่งบางอย่างซ้ำหรือในคำอื่น ๆ ที่ดำเนินการคำสั่งเกี่ยวกับสิ่งที่มีอยู่ในไดเรกทอรีทุกคนและทุกสิ่งที่มีอยู่ในไดเรกทอรีที่มีอยู่ภายในและอื่น ๆ จน ไม่มีอะไรอีกแล้ว


นอกจากนี้หากคุณต้องการทราบว่าผู้ใช้ของคุณอยู่ในกลุ่มใดคุณสามารถอ้างถึงสิ่งนี้ stackoverflow.com/questions/350141/…
Breedly

3
อย่างไรก็ตามคุณอาจต้องระมัดระวังเกี่ยวกับการเปลี่ยนความเป็นเจ้าของหากต้องติดตั้งในไดเร็กทอรี / usr / local / bin
Breedly

16
การเปลี่ยนความเป็นเจ้าของสิ่งใด ๆ ในเส้นทาง / usr / Library หรือ / var เป็นสิ่งที่ไม่ดี ระบบสามารถหยุดทำงานได้เนื่องจากไฟล์และไดรเวอร์ไม่สามารถเข้าถึงได้อีกต่อไปและการอัพเดตในอนาคตอาจหยุดลงหากผู้ติดตั้งรู้สึกว่าพา ธ ไม่ได้เป็นเจ้าของโดย root: wheel การซ่อมแซมความเสียหายนั้นยากมากและมักจะทำได้ดีที่สุดโดยติดตั้งระบบปฏิบัติการใหม่ ผู้ใช้ที่ไร้เดียงสา / ไม่มีประสบการณ์ไม่รู้เกี่ยวกับระบบปฏิบัติการมากพอที่จะเข้าใจว่าไฟล์ / ไดเรกทอรีใดบ้างที่อาจปลอดภัยและควรระมัดระวังไม่ให้ลองทำที่บ้าน
ชายดีบุก

ฮ่า ๆ นี่เป็นคำตอบที่น่าอาย :) ฉันแก่แล้วและฉลาดกว่าตอนนี้ฉันเดาแล้ว
Breedly

11

ฉันฟอร์แมต Mac ของฉันและวิธีแก้ปัญหาที่แนะนำหลายอย่างไม่ได้ผลสำหรับฉัน สิ่งที่ใช้ได้ผลสำหรับฉันคือคำสั่งเหล่านี้ตามลำดับที่ถูกต้อง:

  1. ติดตั้ง Homebrew:

    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  2. ติดตั้ง Ruby:

    brew install ruby
  3. ติดตั้ง Compass:

    sudo gem install compass

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


6

ทำงานให้ฉัน:

sudo gem uninstall cocoapods

sudo gem install cocoapods

ทำงานได้ดีมากสำหรับฉันเช่นกัน! ขอบคุณ ความพยายามในการบันทึกการติดตั้ง rbenv หรือ RVM
NaXir

5
การ downvoting เพราะตามที่ได้รับการบันทึกไว้ในความคิดเห็นอื่น ๆ การติดตั้งอัญมณีในขณะที่รูทเป็นวิธีปฏิบัติที่อันตราย โปรแกรมติดตั้งสามารถทำอะไรกับระบบของคุณอย่างแท้จริง
ผู้ชายบางคน

@SomeGuy: "ตัวติดตั้งสามารถทำอะไรก็ได้" ... มีโอกาสมากขึ้นที่ผู้ใช้จะใช้คำสั่งและทำให้ระบบอ่อนลง ฉันไม่สามารถนึกถึงเวลาที่ผู้ติดตั้งทำให้ระบบของฉันสับสน แต่ฉันจำได้อย่างชัดเจนถึงเวลาที่ฉันทำ sudoเป็นคำสั่งที่มือใหม่ชอบเพราะทำให้สามารถทำสิ่งผิดได้ง่ายและใช้เวลาเรียนรู้ที่จะหวาดระแวงอย่างเหมาะสมเมื่อใช้มัน
ชายดีบุก

1
คำตอบที่ดีที่สุด !!!! หลังจากรันคำสั่ง 2 เหล่านี้แล้วโปรดรีสตาร์ท Terminal และนั่นคือทั้งหมด !!! ขอบคุณมาก!!!
nosequeweaponer

4

ตรวจสอบว่าเวอร์ชั่น Ruby ของคุณถูกต้องหรือไม่ ถ้าไม่เปลี่ยน

สิ่งนี้ใช้ได้กับฉัน:

$ rbenv global 1.9.3-p547
$ gem update --system

นี้เป็นทางออกที่ดีกว่า: >update chownขอบคุณ! . ฉันต้องวิ่งด้วยbrew install ruby
Jose Llausas

4

ติดตั้ง rbenv โดยbrew install rbenv;

จากนั้นใส่eval "$(rbenv init -)"ที่ส่วนท้ายของ ~ / .bash_profile (หรือ ~ / .zshrc ของ MacOS);

เปิดเทอร์มินัลใหม่แล้วเรียกใช้gem install ***จะทำงาน!


ใช้งานไม่ได้สำหรับฉัน ❯ brew install rbenv -q Warning: rbenv 1.1.1 is already installed and up-to-date To reinstall 1.1.1, run `brew reinstall rbenv` ~/.gem/ruby/2.3.0/gems/colorls-1.1.1 ❯ eval "$(rbenv init -)" ~/.gem/ruby/2.3.0/gems/colorls-1.1.1 ❯ gem update Updating installed gems Updating CFPropertyList ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.
Max Coplan

2

Bobbdelsol ชี้ให้เห็นว่าการทำอาหารให้ฉัน:

==> which ruby
/usr/bin/ruby

==> rbenv install 1.9.3-p551
Downloading ruby-1.9.3-p551.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p551.tar.bz2
Installing ruby-1.9.3-p551...
Installed ruby-1.9.3-p551 to /Users/username/.rbenv/versions/1.9.3-p551


==> which ruby
/Users/username/.rbenv/shims/ruby

==> which gem
/Users/username/.rbenv/shims/gem

==> gem install compass
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.


==> ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]


==> rbenv global 1.9.3-p551


==> ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]


==> rbenv global 1.9.3-p551


==> rbenv rehash


==> ruby -v
ruby 1.9.3p551 (2014-11-13 revision 48407) [x86_64-darwin15.4.0]


==> gem install compass
Fetching: sass-3.4.22.gem (100%)
Fetching: multi_json-1.11.3.gem (100%)
Fetching: compass-core-1.0.3.gem (100%)
Fetching: compass-import-once-1.0.5.gem (100%)
Fetching: chunky_png-1.3.5.gem (100%)
Fetching: rb-fsevent-0.9.7.gem (100%)
Fetching: ffi-1.9.10.gem (100%)
Building native extensions.  This could take a while...
Fetching: rb-inotify-0.9.7.gem (100%)
Fetching: compass-1.0.3.gem (100%)
    Compass is charityware. If you love it, please donate on our behalf at http://umdf.org/compass Thanks!
Successfully installed sass-3.4.22
Successfully installed multi_json-1.11.3
Successfully installed compass-core-1.0.3
Successfully installed compass-import-once-1.0.5
Successfully installed chunky_png-1.3.5
Successfully installed rb-fsevent-0.9.7
Successfully installed ffi-1.9.10
Successfully installed rb-inotify-0.9.7
Successfully installed compass-1.0.3
9 gems installed
Installing ri documentation for sass-3.4.22...
Installing ri documentation for multi_json-1.11.3...
Installing ri documentation for compass-core-1.0.3...
Installing ri documentation for compass-import-once-1.0.5...
Installing ri documentation for chunky_png-1.3.5...
Installing ri documentation for rb-fsevent-0.9.7...
Installing ri documentation for ffi-1.9.10...
Installing ri documentation for rb-inotify-0.9.7...
Installing ri documentation for compass-1.0.3...
Installing RDoc documentation for sass-3.4.22...
Installing RDoc documentation for multi_json-1.11.3...
Installing RDoc documentation for compass-core-1.0.3...
Installing RDoc documentation for compass-import-once-1.0.5...
Installing RDoc documentation for chunky_png-1.3.5...
Installing RDoc documentation for rb-fsevent-0.9.7...
Installing RDoc documentation for ffi-1.9.10...
Installing RDoc documentation for rb-inotify-0.9.7...
Installing RDoc documentation for compass-1.0.3...

ใกล้ชิด แต่ "ข้อผิดพลาด: ขณะดำเนินการ gem ... (Gem :: FilePermissionError) คุณไม่มีสิทธิ์เขียนสำหรับไดเรกทอรี /Library/Ruby/Gems/2.0.0"
JGallardo

1

ทดสอบกับ MacOS Mojave ด้วยความสำเร็จ:

  1. ถอนการติดตั้งทับทิมรุ่นเก่าทั้งหมดของคุณ (สมมติว่าคุณมี 2.00 และ 2.3.0):

    $ rvm uninstall 2.0.0

    $ rvm uninstall 2.3.0

  2. ติดตั้งทับทิมรุ่นใหม่ล่าสุด:

    $ brew install ruby

  3. ตั้งค่านามแฝงเริ่มต้นเป็นรุ่นของคุณ:

    $ rvm alias create default ruby

  4. รีบูตระบบของคุณเพราะนี่เป็นวิธีที่ปลอดภัยที่สุดที่คอมพิวเตอร์ของคุณจะโหลดทับทิมรุ่นใหม่ที่เพิ่งติดตั้ง

หลังจากคุณทำตามขั้นตอนข้างต้นแล้วคุณสามารถเรียกใช้gemคำสั่งใด ๆได้สำเร็จ


-2

cd /Library/Ruby/Gems/2.0.0

เปิด

คลิกขวารับข้อมูล

คลิกล็อค

รหัสผ่านสถานที่

ทำให้ทุกอย่างอ่านและเขียน


1
โปรดสละเวลาในการจัดรูปแบบคำตอบของคุณเพื่อให้สามารถอ่านได้ ความพยายามในการวิจัยและการอธิบายผลตอบแทน
Tin Man

-2

ให้ผู้ใช้ $ whoami สร้าง somethin ในโฟลเดอร์เหล่านั้น

sudo chown -R user /Library/Ruby/Gems/2.0.0

ไม่โฟลเดอร์นี้เป็นของระบบด้วยเหตุผลที่ดีระบบใช้เพื่อวัตถุประสงค์ของตัวเอง มันก็โอเคที่จะเรียกใช้สคริปต์ที่ชี้ไปที่มัน แต่สร้างและใช้ Ruby sandboxed หากคุณต้องการยุ่งกับมัน
Tin Man


-4

การติดตั้ง gem หรือการอัพเดต RubyGems ล้มเหลวด้วยข้อผิดพลาดการอนุญาตจากนั้นพิมพ์คำสั่งนี้

sudo gem install cocoapods

1
นี่เป็นคำตอบอื่น ๆ โปรดอ่านคำตอบอื่น ๆ ก่อนที่จะสร้างคำตอบเพื่อให้แน่ใจว่าคุณมีสิ่งใหม่ ๆ
Tin Man


-18

สาเหตุของข้อผิดพลาดเป็นเพราะคุณไม่ได้เข้าสู่ระบบในฐานะผู้ใช้รูทบนเครื่อง

หากคุณเปิดใช้งานรูทการใช้งานบน mac ของคุณในประเภทเทอร์มินัล

$ su

หากคุณไม่มีผู้ใช้รูทคุณต้องเปิดใช้งานโดยใช้ขั้นตอนต่อไปนี้

  1. จากเมนู Apple เลือกการตั้งค่าระบบ ...
  2. จากเมนูมุมมองให้เลือกผู้ใช้และกลุ่ม
  3. คลิกที่ล็อคและรับรองความถูกต้องเป็นบัญชีผู้ดูแลระบบ
  4. คลิกตัวเลือกการเข้าสู่ระบบ….
  5. คลิกปุ่ม "แก้ไข ... " หรือ "เข้าร่วม ... " ที่ด้านล่างขวา
  6. คลิกปุ่ม“ Open Directory Utility …”
  7. คลิกที่ล็อคในหน้าต่างของ Directory Utility
  8. ป้อนชื่อบัญชีผู้ดูแลระบบและรหัสผ่านจากนั้นคลิกตกลง
  9. เลือกเปิดใช้งานผู้ใช้รูทจากเมนูแก้ไข
  10. ป้อนรหัสผ่านรูทที่คุณต้องการใช้ทั้งในฟิลด์รหัสผ่านและยืนยันจากนั้นคลิกตกลง

เพิ่มเติมได้ที่http://support.apple.com/kb/ht1528

อย่างน้อยก็ใช้งานได้สำหรับฉันหลังจากติดขัดอยู่สองสามชั่วโมง


ทำไมต้องลงคะแนน พวกคุณช่วยเขียนเหตุผลให้ทำไหม
Mohammad Arif

8
การติดตั้งพลอยในฐานะรูทเป็นแนวคิดที่ไม่ดี stackoverflow.com/questions/2119064/…
spuder
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.