คุณไม่มีสิทธิ์เขียนสำหรับไดเร็กทอรี /Library/Ruby/Gems/2.3.0 (ผู้ใช้ mac)


159

ด้านล่างนี้คือสิ่งที่ฉันต้องทำ

ในการเรียกใช้ข้อมูลจำเพาะคุณจะต้องติดตั้ง RSpec ขั้นแรกให้เรียกใช้gem install bundlerในไดเรกทอรีรากของโครงการของคุณ bundle installจากนั้นเรียกใช้ ในการรันไฟล์ข้อมูลจำเพาะเดียวให้รันคำสั่งดังนี้: bundle exec rspec spec/00_hello_spec.rb. bundle exec rspecเมื่อต้องการเรียกใช้ทั้งหมดของรายละเอียดในครั้งเดียววิ่ง

ดังนั้นฉันพิมพ์gem install bundlerใน Terminal และได้รับข้อผิดพลาด:

คุณไม่มีสิทธิ์เขียนสำหรับไดเร็กทอรี /Library/Ruby/Gems/2.3.0

และนี่อยู่ในไฟล์โปรเจ็กต์ในอะตอม

source "https://rubygems.org"
gem "rspec", "~> 3.2.0"

คำถามของฉันคือ:

ดูเหมือนว่าเทอร์มินัลให้การตอบสนองฉันเพราะฉันไม่ควรเปลี่ยนแปลงอะไรกับทับทิมและฉันต้องเข้าไปbundle installในอะตอม? ใครช่วยบอกวิธีใช้อะตอมหรือรันอะไรก็ได้ในอะตอม

คำตอบ:


280

อัปเดต: ฉันได้เขียนคำอธิบายโดยละเอียดเกี่ยวกับวิธีต่างๆที่คุณสามารถติดตั้ง Ruby gems บนเครื่อง Mac คำแนะนำเดิมของฉันในการใช้สคริปต์ยังคงมีอยู่ แต่บทความของฉันมีรายละเอียดเพิ่มเติม: https://www.moncefbelyamani.com/the-definitive-guide-to-installing-ruby-gems-on-a-mac/

คุณคิดถูกแล้วที่ macOS จะไม่ยอมให้คุณเปลี่ยนแปลงอะไรเลยกับเวอร์ชัน Ruby ที่ติดตั้งมากับ Mac ของคุณ อย่างไรก็ตามเป็นไปได้ที่จะติดตั้งอัญมณีเช่นการbundlerใช้ Ruby เวอร์ชันแยกต่างหากที่ไม่รบกวนการใช้งานของ Apple

การใช้sudoเพื่อติดตั้งอัญมณีหรือเปลี่ยนสิทธิ์ของไฟล์ระบบและไดเร็กทอรีเป็นสิ่งที่ไม่แนะนำอย่างยิ่งแม้ว่าคุณจะรู้ว่ากำลังทำอะไรอยู่ก็ตาม เราช่วยหยุดให้คำแนะนำที่ไม่ดีนี้ได้ไหม นี่คือบทความโดยละเอียดที่ฉันเขียนแสดงวิธีsudo gem installล้างคอมพิวเตอร์ของคุณ: https://www.moncefbelyamani.com/why-you-should-never-use-sudo-to-install-ruby-gems/

การแก้ปัญหาประกอบด้วยสองขั้นตอนหลัก:

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

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

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

จากนั้นสองวิธีที่ง่ายที่สุดในการติดตั้ง Ruby เวอร์ชันแยกต่างหากคือ:

หากคุณต้องการความยืดหยุ่นในการสลับระหว่าง Ruby เวอร์ชันต่างๆได้อย่างง่ายดาย [แนะนำ]

เลือกหนึ่งในสี่ตัวเลือกเหล่านี้:

  • chrubyและruby-install - คำแนะนำส่วนตัวของฉันและคำแนะนำที่สคริปต์ของฉันติดตั้งโดยอัตโนมัติ สิ่งเหล่านี้สามารถติดตั้งกับ Homebrew:
brew install chruby ruby-install
  • rbenv - สามารถติดตั้งกับ Homebrew

  • RVM

  • asdf

หากคุณเลือกchrubyและruby-installคุณสามารถติดตั้ง Ruby ล่าสุดได้ดังนี้:

ruby-install ruby

เมื่อคุณติดตั้งทุกอย่างและกำหนดค่าของคุณ.zshrcหรือ.bash_profileตามคำแนะนำจากเครื่องมือด้านบนแล้วให้ปิดและรีสตาร์ท Terminal จากนั้นเปลี่ยนไปใช้ Ruby เวอร์ชันที่คุณต้องการ ในกรณีของchrubyมันจะเป็นดังนี้:

chruby 2.7.2

ไม่ว่าคุณจะต้องกำหนดค่า.zshrcหรือ.bash_profileขึ้นอยู่กับเชลล์ที่คุณใช้ หากคุณไม่แน่ใจโปรดอ่านคู่มือนี้: https://www.moncefbelyamani.com/which-shell-am-i-using-how-can-i-switch/

หากคุณแน่ใจว่าคุณไม่ต้องการ Ruby มากกว่าหนึ่งเวอร์ชันในเวลาเดียวกัน (นอกเหนือจากเวอร์ชันที่มาพร้อมกับ macOS)

  • ติดตั้งทับทิมด้วย Homebrew:
brew install ruby

จากนั้นอัปเดตของคุณPATHโดยเรียกใช้ (แทนที่2.7.0ด้วยเวอร์ชันที่ติดตั้งใหม่ของคุณ):

echo 'export PATH="/usr/local/opt/ruby/bin:/usr/local/lib/ruby/gems/2.7.0/bin:$PATH"' >> ~/.zshrc

จากนั้น "รีเฟรช" เชลล์ของคุณเพื่อให้การเปลี่ยนแปลงเหล่านี้มีผล:

source ~/.zshrc

หรือคุณสามารถเปิดแท็บเทอร์มินัลใหม่หรือปิดและรีสตาร์ท Terminal

แทนที่.zshrcด้วย.bash_profileถ้าคุณใช้ Bash หากคุณไม่แน่ใจว่ากำลังใช้เชลล์ใดโปรดอ่านคู่มือนี้: https://www.moncefbelyamani.com/which-shell-am-i-using-how-can-i-switch/

ในการตรวจสอบว่าคุณกำลังใช้ Ruby เวอร์ชันที่ไม่ใช่ระบบคุณสามารถรันคำสั่งต่อไปนี้:

which ruby

มันควรจะเป็นอย่างอื่นที่ไม่ใช่ /usr/bin/ruby

ruby -v

ควรเป็นอย่างอื่นที่ไม่ใช่ 2.6.3 หากคุณใช้ macOS Catalina ณ วันนี้ 2.7.2 เป็น Ruby เวอร์ชันล่าสุด

เมื่อคุณติดตั้ง Ruby เวอร์ชันใหม่แล้วตอนนี้คุณสามารถติดตั้ง Bundler (หรืออัญมณีอื่น ๆ ) ได้:

gem install bundler

4
ถ้าคุณชอบฉันและคุณใช้ zsh (หรือเปลือกอื่นที่ไม่ใช่ bash) มีขั้นตอนพิเศษ! หลังจากติดตั้งที่คุณต้องทำ rbenv ที่มาecho 'eval "$(rbenv init -)"' >> ~/.bash_profile
Marlo

2
หากคุณต้องเผชิญกับข้อผิดพลาดสิทธิ์ในการไดเรกทอรี / usr / sudo chown -R $(whoami) $(brew --prefix)/*ท้องถิ่นวิ่ง ดูหัวข้อนี้สำหรับข้อมูลเพิ่มเติม
Anas Tiour

6
สิ่งนี้มีประโยชน์มาก ... ควรตั้งเป็นคำตอบที่ถูกต้อง
Spencer Müller Diniz

5
เนื่องจาก MacOS สนับสนุนให้ผู้คนเปลี่ยนมาใช้ zsh คุณจึงควรใช้การเปลี่ยนแปลงกับ ~ / .bash_profile กับ ~ / .zshrc
Adam_G

1
@stevec บางทีคุณอาจพลาดบางขั้นตอนในคำแนะนำในการติดตั้ง rbenv? หรือบางทีคุณอาจไม่ได้ออกและรีสตาร์ท Terminal? ฉันจะทำตามคำแนะนำ rbenv ที่นี่: github.com/rbenv/rbenv#installation หากคุณเปิดให้ใช้chrubyแทนผมขอแนะนำให้ใช้สคริปต์ที่ชุดทุกอย่างขึ้นสำหรับคุณเช่นนี้: github.com/monfresh/install-ruby-on-macos คุณจะต้องถอนการติดตั้ง rbenv ก่อนจึงจะรันสคริปต์นั้น: github.com/rbenv/rbenv#uninstalling-rbenv
monfresh

83

หากคุณไม่ต้องการเรียกใช้ให้sudoติดตั้งทับทิมโดยใช้ homebrew

brew install ruby
export GEM_HOME="$HOME/.gem"
gem install rails

คุณอาจต้องการเพิ่มexport GEM_HOME="$HOME/.gem"ในของคุณ~/.bash_profileหรือ.zshrcถ้าคุณใช้ zsh

หมายเหตุ: RubyGems เก็บอัญมณีเวอร์ชันเก่าดังนั้นอย่าลังเลที่จะทำความสะอาดหลังจากอัปเดต:

gem cleanup

4
ไม่ได้ช่วยใน Catalina OS 😐
Efrat Levitan

อัปเดตคำตอบของฉัน
STIKO

Rails is not currently installed on this system. To get the latest version, simply type: $ sudo gem install rails You can then rerun your "rails" command
Efrat Levitan

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

อย่าลืมsource ~/. zshrc(หรือ~/.bash_profile)
gordinmitya

73

ทำงานให้ฉันโดยใช้พารามิเตอร์ที่--user-installรันคำสั่งต่อไปนี้:

gem install name_of_gem --user-install

จากนั้นเขาก็เริ่มดึงข้อมูลและติดตั้ง

แก้ไข

มีอัญมณีชิ้นหนึ่งที่ฉันยังไม่สามารถติดตั้งได้ (ต้องใช้ส่วนหัว Ruby.h ของชุดพัฒนา Ruby หรืออะไรสักอย่าง) จากนั้นฉันลองใช้ตัวจัดการเวอร์ชันอื่น แต่ก็ยังใช้งานไม่ได้จริงตามที่ระบุไว้ในเอกสารว่า เพียงแค่ติดตั้งและเปลี่ยน (ไม่ได้เปลี่ยนเวอร์ชัน) จากนั้นฉันได้ลบตัวจัดการเวอร์ชันที่ติดตั้งทั้งหมดและติดตั้งในภายหลังด้วยbrew install rubyเวอร์ชันล่าสุดและตั้งค่าตัวแปร PATH ด้วย (จะกล่าวถึงหลังจากการติดตั้งทับทิมจากการชง) ซึ่งได้ผล


2
นี่ควรเป็นคำตอบที่เลือก Brew ยังไม่รองรับชิป M1 และมันก็ใช้งานได้เหมือนมีเสน่ห์
Tom Roggero

1
ทำไมคำตอบนี้จึงอยู่ในรายการ? มันเป็นคำตอบที่ถูกต้อง
peterretief

7

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

sudo gem installถ้าคุณรู้ว่าสิ่งที่คุณทำคุณสามารถใช้


5

ฉันประสบปัญหาเดียวกันหลังจากติดตั้ง macOS Catalina ฉันได้ลองใช้คำสั่งด้านล่างและใช้งานได้

sudo gem update

4

เรียกใช้สิ่งนี้

$ rbenv init
# Load rbenv automatically by appending
# the following to ~/.zshrc:

eval "$(rbenv init -)"

ทำตามคำแนะนำ (ในกรณีของฉันเพิ่มเป็น~ / .zshrc );)


สำคัญเช่นกัน: การเปลี่ยนแปลงจะมีผลเฉพาะเมื่อคุณรีบูตคอนโซล สองตัวเลือก

  • ป้อน source <modified file>
  • ปิดและเปิดอีกครั้ง

ฉันอัปเกรดเป็น Catalina (ซึ่งเปลี่ยนจาก bash เป็น zsh) และฉันลืมที่จะคัดลอกทุกอย่างตั้งแต่ต้น.bash_profileไปจนถึง.zshrc
wetjosh

ได้ผล! อย่าใช้sudo! ในกรณีที่คุณไม่ได้ใช้ ZSH คุณสามารถเพิ่มสิ่งนี้ลงใน.profileหรือ.bash_profile. วิธีที่ดีในการตรวจสอบว่างานนี้คือการใช้งานwhich rubyก็ควรจะชี้ไปยังเส้นทางที่มีและไม่ให้rbenv /usr/local/ruby
Swaathi Kakarla

2

หากคุณติดตั้งทับทิมแยกกันและติดตั้งทับทิมโดยใช้ rbenv / rvm คุณ budler อาจชี้ไปที่เวอร์ชันอื่น

ลอง

gem env home

และ

ruby -v

ทั้งสองควรชี้ไปที่เวอร์ชันเดียวกันตรวจสอบว่าคุณได้ติดตั้งทับทิมโดยใช้ rbenv / rvm หากเป็นเช่นนั้นให้ลบเวอร์ชันทับทิมที่คุณติดตั้งแยกกัน

เพื่อให้อัญมณีทำงานได้คุณต้องเรียกใช้ rbenv

rbenv shell <ruby version> 

และ

rbenv global <ruby version>

ฉันไม่แน่ใจว่า RVM ทำงานอย่างไร แจ้งให้เราทราบหากได้ผล


ไม่มีการตั้งค่าเชลล์และโกลบอล ทำไมไม่เป็นเช่นนั้นในคำแนะนำ rbenv 🤔
feitla

ไม่แน่ใจว่าทำไมถึงพลาดฉันสามารถหาคำตอบได้หลังจากลองใช้แล้ว
Bharathan Kumaran

0

โซลูชันสำหรับ Mac

  1. ติดตั้ง / อัปเดตRVMด้วยทับทิมเวอร์ชันล่าสุด

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

  2. ติดตั้งBundler

    gem install bundler


หลังจากสองคำสั่งนี้(sudo) gem install ....เริ่มทำงาน


อาจต้องระบุด้วยrvm use <version>
ObjectNameDisplay

0

ควรใช้การติดตั้งทับทิมที่แตกต่างกัน ฉันใช้rbenvเพื่อจุดประสงค์นั้น

# install your version of ruby
$ rbenv install 2.0.0-p247

# modify .ruby_version on current directory
$ rbenv local 2.0.0-p247

# proceed installing gems
$ gem install bundler

Disclamer: ฉันไม่ใช่คนทับทิม สิ่งนี้ใช้ได้ผลสำหรับฉันและหากคุณเป็นผู้เชี่ยวชาญด้านทับทิมและเห็นสิ่งที่ต้องเปลี่ยนแปลงในคำตอบนี้โปรดดำเนินการต่อหรือแสดงความคิดเห็น!


-1

สิ่งนี้ใช้ได้ผลกับฉันบน Mac

sudo chown -R $ (whoami) $ (ชง - คำนำหน้า) / *



-2

ปัญหาที่ฉันมี: - คุณไม่มีสิทธิ์ในการเขียนสำหรับไดเร็กทอรี /Library/Ruby/Gems/2.6.0

โซลูชันใช้งานได้สำหรับฉัน: sudo gem ติดตั้งราง -v 6.0.0


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