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


112

ฉันติดตั้ง Ruby บน Ubuntu 16.04 แล้ว

$which ruby  

/usr/bin/ruby

$ruby -v 

ruby 2.3.0p0 (2015-12-25) [x86_64-linux-gnu]

$gem install bundler 

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

ความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างมาก!


คุณสามารถลองติดตั้ง RVM และติดตั้งทับทิมรุ่นใหม่กว่าเช่น 2.3.3
Anton Skovorodko

สำหรับความคิดเห็นที่ 3: แพคเกจ "python-software-properties" ไม่พร้อมใช้งานคุณควรแทนที่ด้วยซอฟต์แวร์ - คุณสมบัติทั่วไป
Francisco Pedraza

1
ตัวเลือก RVM และ imho ที่ดียิ่งขึ้นและติดตั้งง่ายขึ้นในรูปแบบ "การติดตั้งโดยผู้ใช้" ที่บริสุทธิ์ (เมื่อเทียบกับตัวเลือกที่เรียกร้องสิทธิ์ทั่วโลก) อาจเป็นสิ่งที่ดีกว่าการแก้ไขด้วยสิทธิ์
Frank Nocke

8
ฉันหวังว่าสตรีมนี้จะอธิบายว่าเหตุใด OP นี้จึงมีปัญหานี้และเหตุใดพวกเขาจึงควรละทิ้งเวอร์ชันของ Ruby เพื่อสนับสนุนทั้ง Ruby และตัวจัดการการติดตั้งหลายตัว (RVM หรือ RBEVN) ฉันไม่สามารถบอกได้อย่างแน่นอนว่าคำแนะนำนี้ขึ้นอยู่กับความชอบส่วนบุคคลหรือไม่ ฉันหวังว่าจะมีข้อมูลเพิ่มเติมเบื้องหลังคำแนะนำนี้
BaldEagle

sudo gem install bundlerเหรอ?
user2023370

คำตอบ:


159

sudo apt-get remove rubyก่อนอื่นคุณต้องถอนการติดตั้งทับทิมติดตั้งโดยอูบุนตูกับสิ่งที่ต้องการ

จากนั้นติดตั้งทับทิมใหม่โดยใช้rbenvและRuby-buildตามเอกสารของพวกเขา:

cd $HOME
sudo apt-get update 
sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL

git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
exec $SHELL

rbenv install 2.3.1
rbenv global 2.3.1
ruby -v

ขั้นตอนสุดท้ายคือการติดตั้ง Bundler:

gem install bundler
rbenv rehash

แล้วสนุก!

เดเร็ค


9
คำแนะนำวิธีการติดตั้งทับทิม (บนราง) อยู่ที่นี่gorails.com/setup/ubuntu/16.04
Andrzej Rehmann

5
ผมชนิดมีเงื่อนงำที่จะทำถอนการติดตั้งเพราะมันต้องถอนการติดตั้งโปรแกรมขึ้นเกินไป ( vim-gnomeตัวอย่าง) ฉันเดาว่าฉันอยากรู้ว่าทำไมในตอนแรกจึงต้องเขียน/var/lib/...เพื่อติดตั้งผู้ใช้ ... ฉันทำsudo gem installเมื่อไม่จำเป็นหรือไม่?
PlasmaBinturong

4
ฉันเห็นด้วยกับ @AntonSkovorodko คงจะดีถ้าคำตอบสามารถแสดงให้เห็นถึงการถอนการติดตั้ง Ruby
blong

4
เพียงระมัดระวังเมื่อถอนการติดตั้ง Ruby ในสภาพแวดล้อม Cinnamon (เกิดขึ้นใน Linux Mint 18.2) หลังจากรีบูตฉันไม่สามารถเรียกใช้ระบบในโหมดกราฟิกได้ เมื่อสิ่งนี้เกิดขึ้นกับคุณไปที่ CLI ผ่านCtrl+Alt+F1และเรียกใช้คำสั่งต่อไปนี้ (ถอนการติดตั้งและติดตั้ง Cinnamon อีกครั้ง): sudo apt purge cinnamon && sudo apt install cinnamon
Kout

2
เมื่อคำตอบนี้มีอายุมากขึ้นคุณอาจต้องการทราบว่าเวอร์ชันล่าสุดที่มีให้คืออะไร: rbenv install -lสำหรับรายการเวอร์ชันที่มีทั้งหมดrbenv install 2.5.1สำหรับเวอร์ชัน 2.5.1 หรืออะไรก็ได้ที่คุณต้องการ
Paul Sturm

67

หากคุณต้องการใช้การกระจาย Ruby แทน rb-env / rvm คุณสามารถตั้งค่าGEM_HOMEสำหรับผู้ใช้ปัจจุบันของคุณได้ เริ่มต้นด้วยการสร้างไดเร็กทอรีเพื่อจัดเก็บอัญมณี Ruby สำหรับผู้ใช้ของคุณ :

$ mkdir ~/.ruby

จากนั้นอัพเดตเชลล์ของคุณเพื่อใช้ไดเร็กทอรีนั้นสำหรับGEM_HOMEและอัพเดตPATHตัวแปรของคุณเพื่อรวมไดเร็กทอรี Ruby gem bin

$ echo 'export GEM_HOME=~/.ruby/' >> ~/.bashrc
$ echo 'export PATH="$PATH:~/.ruby/bin"' >> ~/.bashrc
$ source ~/.bashrc

(บรรทัดสุดท้ายจะโหลดตัวแปรสภาพแวดล้อมในเชลล์ปัจจุบันของคุณอีกครั้ง)

ตอนนี้คุณควรจะสามารถติดตั้ง Ruby gems ภายใต้ผู้ใช้ของคุณโดยใช้gemคำสั่ง ฉันสามารถทำให้มันทำงานกับ Ruby 2.5.1 ภายใต้ Ubuntu 18.04 bashrcหากคุณกำลังใช้เปลือกที่ไม่ได้ทุบตีแล้วคุณจะต้องแก้ไขสคริปต์เริ่มต้นเปลือกแทนว่า


2
ฉันทำสิ่งนี้แล้วได้รับข้อผิดพลาดเกี่ยวกับ "ไม่พบไฟล์ส่วนหัวสำหรับทับทิม" จากนั้นฉันอ่านสิ่งนี้: stackoverflow.com/a/4502672/2245874และไม่ได้ทำตามทั้งหมด แต่ทำ sudo apt ติดตั้ง ruby -gems แล้วมันก็ใช้ได้สำหรับฉัน
robm

1
ฉันเชื่อว่า @robm หมายถึง Ruby-dev ไม่ใช่ Ruby-gems
Altreus

3
สิ่งนี้น่าจะเหมาะสมกว่าสำหรับผู้ใช้ Ruby ที่ไม่จำเป็นต้องพัฒนากับหลาย ๆ เวอร์ชัน
danielcooperxyz

1
คุณประกาศวิธี Linux ที่ดีมากในการแก้ไขการติดตั้งทับทิมของฉันโดยไม่ต้องใช้เครื่องมือเพิ่มเติมใด ๆ เพียงแค่ทุบตีเก่า ๆ :)
Denis Trofimov

32

(มกราคม 2019) ในการติดตั้ง Ruby โดยใช้สคริปต์ Rbenv ให้ทำตามขั้นตอนเหล่านี้:

1. ขั้นแรกอัปเดตดัชนีแพ็กเกจและติดตั้งแพ็กเกจที่จำเป็นสำหรับเครื่องมือสร้างทับทิมเพื่อสร้าง Ruby จากซอร์ส

sudo apt-get remove ruby
sudo apt update
sudo apt install git curl libssl-dev libreadline-dev zlib1g-dev autoconf bison build-essential libyaml-dev libreadline-dev libncurses5-dev libffi-dev libgdbm-dev

2. จากนั้นรันคำสั่ง curl ต่อไปนี้เพื่อติดตั้งทั้ง rbenv และ ruby-build:

curl -sL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bash -

3. เพิ่ม $ HOME / .rbenv / bin ใน PATH ของระบบ

หากคุณใช้ Bash ให้เรียกใช้:

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc

หากคุณใช้ Zsh run:

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(rbenv init -)"' >> ~/.zshrc
source ~/.zshrc

4. ติดตั้ง Ruby เวอร์ชันเสถียรล่าสุดและตั้งเป็นเวอร์ชันเริ่มต้นด้วย:

rbenv install 2.5.1
rbenv global 2.5.1

หากต้องการแสดงรายการเวอร์ชัน Ruby ที่มีทั้งหมดคุณสามารถใช้ได้: rbenv install -l

5. ตรวจสอบว่า Ruby ได้รับการติดตั้งอย่างถูกต้องโดยการพิมพ์หมายเลขเวอร์ชัน:

ruby -v

# Output
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]

แหล่งที่มา: วิธีการติดตั้ง Ruby บน Ubuntu 18.04

แก้ไข: ติดตั้งทับทิม:

sudo apt-get install rubygems

2
มันเยี่ยมมาก! ดีและรวบรัด ฉันทำตาม.zshrcทุกประการ(ยกเว้นการเปลี่ยนแปลงที่ฉันทำด้วยมือ) และทำงานได้อย่างสมบูรณ์ ในลักษณะเดียวกับที่คุณเพิ่มวิธีการติดตั้งrubygemsผมขอแนะนำอาจจะเพิ่มวิธีการปรับปรุงต่อมารุ่นทับทิมติดตั้ง (ฉันคาดเดาคุณเพียงแค่เรียกใช้rbenv installและrbenv globalคำสั่งอีกครั้งและอาจrbenv uninstallจะตัดรุ่นเก่า)
gMale

1
นี่มันอัศจรรย์มาก! ทำงานได้อย่างสมบูรณ์บน Ubuntu 18.04 WSL
robe007

1
นี่คือคำตอบที่สวยหรูกว่า
rashedcs

15

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

ฉันอยากจะขยายสิทธิ์ของโฟลเดอร์นั้นให้กับ ... เอาล่ะทุกคน:

cd /var/lib
sudo chmod -R a+w gems/

(ฉันพบข้อผิดพลาดของคุณเช่นกันดังนั้นนี่จึงได้รับการยืนยันอย่างเป็นธรรม)


1
ฉันต้องการที่อยู่โฟลเดอร์ / usr / local / bin ด้วย แต่วิธีนี้ใช้งานได้: "ข้อผิดพลาด: ขณะเรียกใช้ gem ... (Gem :: FilePermissionError) คุณไม่มีสิทธิ์เขียนสำหรับไดเร็กทอรี / usr / local / bin .”
eb80

10

ลองใช้chown -Rบนvar/lib/gemsไดเร็กทอรีกำหนดความเป็นเจ้าของให้กับผู้ใช้ [ rubyusername] ในตัวอย่างนี้ผู้ใช้ที่จะติดตั้งและพัฒนาด้วยอัญมณี

 # chown -R rubyusername:rubyusername /var/lib/gems 

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


2
สามารถแก้ปัญหานั้นได้ แต่มีปัญหาอื่นปรากฏขึ้น: ข้อผิดพลาด: ขณะเรียกใช้ gem ... (Gem :: FilePermissionError) คุณไม่มีสิทธิ์เขียนสำหรับไดเร็กทอรี / usr / local / bin ฉันเดาว่ามีอย่างอื่นผิดแทนที่จะได้รับอนุญาต
derek

3

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

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

echo 'eval "$(rbenv init -)"' >> ~/.bashrc

บรรทัดในคำตอบของ derek


3

ฉันพบข้อผิดพลาดเดียวกันใน GitHub Actions การเพิ่มsudoช่วยแก้ปัญหาได้

sudo gem install bundler

2

Ubuntu 20.04:

ตัวเลือกที่ 1 - ตั้งค่าไดเร็กทอรีการติดตั้ง gem สำหรับบัญชีผู้ใช้ของคุณ

สำหรับ bash (สำหรับ zsh เราจะใช้.zshrcแน่นอน)

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

ตัวเลือกที่ 2 - ใช้ snap

ถอนการติดตั้ง apt-version ( ruby-full) และติดตั้งใหม่ด้วยsnap

sudo apt-get remove ruby
sudo snap install ruby --classic

0

การติดตั้งเข็มทิศใหม่ใช้งานได้สำหรับฉัน .. มันวิเศษมาก!

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