'sudo gem install' หรือ 'gem install' และตำแหน่งของ gem


140

การใช้ ' sudo gem list --local' และ ' gem list --local' ให้ผลลัพธ์ที่ต่างกัน เส้นทางอัญมณีของฉันถูกตั้งไว้ที่โฟลเดอร์บ้านของฉันและมีเพียงอัญมณีจาก ' gem list --local'

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

my ~/.profile
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH"

~ / .bash_profile ว่างเปล่า


1
ฉันคิดว่านี่เป็นคำถามที่ถูกต้องสำหรับพวกเราที่ต้องใช้อัญมณีที่ต้องการสิทธิ์พิเศษ
เคลลี่

ที่เกี่ยวข้อง: stackoverflow.com/questions/21141584/… . ผมใช้ rbenv สำหรับการจัดการรุ่นทับทิมและวิ่งเข้าไปในปัญหาเพราะผมใช้แทนsudo gem install rails gem install rails
Dennis

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

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

คำตอบ:


146

ตรงกันข้ามกับโพสต์อื่น ๆ ทั้งหมดฉันไม่แนะนำให้ใช้sudoเมื่อติดตั้งพลอย

แต่ฉันขอแนะนำให้คุณติดตั้งRVMและเริ่มต้นชีวิตที่มีความสุขกับบ้านอัญมณีแบบพกพาและทับทิมรุ่นต่าง ๆ ที่มีชีวิตอยู่ภายใต้หลังคาเดียวกัน

สำหรับมือใหม่จากเอกสาร :

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

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

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

หากคุณตัดสินใจว่าจะใช้ RVMแล้วการใช้sudoจะทำให้เกิดความแปลกประหลาดทุกประเภทเพราะทับทิมแต่ละรุ่นที่คุณติดตั้งผ่านRVMมี GEM_HOME ของตัวเอง

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


12
+1 สำหรับ rvm แนะนำ แต่ -1 สำหรับการกล่าวโทษที่สับสนเกี่ยวกับความเป็นไปได้อื่นของการใช้ sudo
tfwright

10
ตกลง แต่เหตุผลทั้งหมดของคุณทำให้เดือดลงไปที่ "เพราะ RVM ดีมาก" ไม่ใช่เพราะการใช้ sudo นั้นเป็นอันตราย ครั้งเดียวที่คุณไม่ต้องการอยู่ในสถานการณ์เฉพาะที่คุณใช้คอมพิวเตอร์สาธารณะ หากคุณต้องการแนะนำ rvm ให้ทำเช่นนั้น ไม่จำเป็นต้องหันไปใช้ FUDD
tfwright

6
ฉันพยายามที่จะไม่แพร่กระจาย FUD และฉันพยายามที่จะให้เหตุผลที่ไม่ใช่ RVM ฉันขอโทษถ้ามันดูเหมือนว่าเป็นอย่างนั้น
jonnii

9
RVM เป็นตัวเลือกที่ดี แต่คุณควรลอง RBENV ที่ดีกว่า มันรบกวนน้อยกว่า RVM
Andres

4
@ HontváriJózsefLeventeมันยากที่จะตอบคำถามของคุณในความคิดเห็น แต่สั้น ๆ คือคุณต้องการให้สภาพแวดล้อมการพัฒนาของคุณใกล้เคียงกับการผลิตมากที่สุด หากคุณกำลังทำงานกับสองแอปหนึ่งในนั้นใช้ ruby ​​2.1 และแอปอื่นที่ผู้ใช้ 1.9 คุณจะต้องตรวจสอบให้แน่ใจว่าสภาพแวดล้อมในท้องถิ่นของคุณใช้เวอร์ชั่นที่ถูกต้อง นั่นคือสิ่งที่ RVM หรือ RBENV ทำเพื่อคุณ คุณจะใช้มันด้วยเหตุผลเดียวกับที่คุณจะใช้สภาพแวดล้อมแบบ sandbox แต่ประโยชน์หลักในกรณีนี้คือการแยก ฉันหวังว่านี่จะช่วยได้!
jonnii

128

คุณยังสามารถติดตั้งอัญมณีในสภาพแวดล้อมท้องถิ่นของคุณ (โดยไม่ต้องsudo) ด้วย

gem install --user-install <gemname>

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

คุณสามารถตรวจสอบอัญมณีที่ไปโดยดูที่ gempaths ด้วย gem environmentกับ ในกรณีของฉันมันคือ "~ / .gem / ruby ​​/ 1.8"

หากคุณต้องการไบนารีจากการติดตั้งท้องถิ่นที่เพิ่มลงในพา ธ ของคุณคุณสามารถเพิ่มบางสิ่งลงใน bashrc ของคุณเช่น:

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

(จากhttp://guides.rubygems.org/faqs/#user-install )


23
+1 สำหรับตัวเลือกนี้มากกว่าโซลูชัน "เครื่องมือการกำหนดค่าอีกอันหนึ่ง" ด้านบน RBENV / RVM
jjpe

ฉันสร้างอัญมณีและเป็นไปตามคู่มือที่ฉันต้องทำrake installและการแก้ไข Isse sudo ผมก็มีการแก้ไขด้วยตนเอง/Library/Ruby/Gems/2.0.0/gems/bundler-1.7.3/lib/bundler/gem_helper.rbเพิ่ม--user-installมี ไม่พบโซลูชันที่ดีกว่าเนื่องจากดูเหมือนว่าrake installจะไม่ยอมรับพารามิเตอร์เพิ่มเติม
Nakilon

ฉันตื่นเต้นมากกับคำสั่งแรกนั้น ฉันพยายามติดตั้งอัญมณีและมีปัญหาเพราะฉันไม่มีสิทธิ์ sudo คำสั่งนั้นใช้ได้ !!!!
Caleb Kleveter

34

ยังดีกว่าใส่--user-installไฟล์ ~ / .gemrc ของคุณเพื่อให้คุณไม่ต้องพิมพ์ทุกครั้ง

gem: --user-install

13

ในกรณีที่คุณ

  • ติดตั้งพลอยทับทิมด้วย sudo
  • ต้องการติดตั้งอัญมณีโดยไม่ต้อง sudo
  • ไม่ต้องการติดตั้ง rvm / rbenv

เพิ่มสิ่งต่อไปนี้ในของคุณ.bash_profile:

export GEM_HOME=/Users/your_user›/.gem
export PATH="$GEM_HOME/bin:$PATH"

เปิดแท็บใหม่ใน Terminal OR source ~/.bash_profileและคุณก็พร้อมที่จะไป!


8
สำหรับคนที่ไม่ได้ทำงานกับ Ruby, Rails, Rake และอะไรก็ตามที่ Ruby Devs ใช้ / ต้องการใช้วิธีนี้จะง่ายกว่าการใช้ rvm มาก ฉันไม่สนใจเกี่ยวกับการมีทับทิมรุ่นต่าง ๆ ที่ฉันต้องการเรียกใช้บางเชลล์โปรแกรมที่แจกจ่ายเป็นอัญมณี ขอบคุณ!
Kevin Gimbel

9

ที่เกี่ยวข้อง (สำหรับผู้ใช้งานชุดรวม) หากคุณต้องการทางเลือกที่เบากว่าสำหรับ RVM ซึ่งจะทำให้ทุกอย่างในไดเรกทอรีที่ผู้ใช้เฉพาะรู้จักฉันแนะนำให้ใช้:

bundle install --path $HOME/.gem

ถ้าคุณต้องการติดตั้งอัญมณีในที่เดียวกัน

gem install --user-install GEMNAME

จะทำการติดตั้ง.gem/ruby/RUBYVERSIONใน homedir ของคุณ (ดูความคิดเห็นอื่นเกี่ยวกับคำถามนี้เกี่ยวกับ--user-install)

สิ่งนี้จะทำให้มองเห็นอัญมณีgem listถอนการติดตั้งผ่านgem uninstallฯลฯ โดยไม่จำเป็นต้องsudoเข้าถึง สคริปต์ที่รันได้ซึ่งติดตั้งโดย gem หรือ bundler สามารถใส่ลงในพา ธ ของคุณได้โดยการเพิ่ม

$HOME/.gem/ruby/RUBYVERSION/bin

เพื่อคุณ $PATHที่คุณgemตัวเองบอกคุณเกี่ยวกับสิ่งนี้หากไม่ได้ตั้งไว้เมื่อคุณทำgem install --user-installตัวเองจะบอกคุณเกี่ยวกับเรื่องนี้ถ้ามันไม่ได้ตั้งค่าเมื่อคุณทำ


ขอบคุณสำหรับสิ่งนี้. เป็นไปได้ไหมที่จะทำให้ Bundler ทำสิ่งนี้โดยปริยาย (และถ้าเป็นเช่นนั้นมันจะเป็นความคิดที่ดีหรือไม่?)
joshtch

6
sudo gem install --no-user-install <gem-name>

จะติดตั้งอัญมณีของคุณทั่วโลกนั่นคือจะสามารถใช้ได้กับบริบททั้งหมดของผู้ใช้


1
นอกจากนี้ยังสามารถเขียนทับอัญมณีที่ติดตั้งของผู้จำหน่ายซึ่งระบบปฏิบัติการอาจคาดหวังว่าจะถูกตั้งค่าเป็นรุ่นที่ระบุ และนั่นอาจทำลายรหัสที่ต้องอาศัยมัน
Tin Man

1
... หรืออาจติดตั้งอัญมณีที่ผู้ขายไม่ได้จัดให้และทำในลักษณะที่ทำให้ผู้ใช้ทุกคนในระบบสามารถใช้งานได้ มันทำให้รุนแรงขึ้นเล็กน้อยว่าคำตอบทุกที่ถือว่าผู้อ่านเป็นผู้ดูแลระบบ dev v / sa ที่จริงไม่ต้องการให้อัญมณีเฉพาะรุ่นที่ผู้ใช้ทุกคนสามารถใช้ได้ : D
dannysauer

1

คุณสามารถติดตั้งพลอยในโฟลเดอร์เฉพาะ (ตัวอย่างผู้จำหน่าย /) ในแอป Rails ของคุณโดยใช้:

bundle install --path vendor

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