Bundler vs RVM vs gems vs RubyGems vs gemsets vs system Ruby [ปิด]


102

ฉันยังใหม่กับ Ruby และพยายามที่จะเข้าใจแนวคิดต่อไปนี้: bundler vs RVM vs gems vs RubyGems vs gemsets vs system rub และฉันก็สับสน

ใครช่วยอธิบาย 'แนวทางปฏิบัติที่ดีที่สุด' เกี่ยวกับวิธีที่ฉันควรจัดการทั้งหมดนี้ในการติดตั้ง Ubuntu เวอร์ชันใหม่ล่าสุดได้ไหม ฉันควรติดตั้งอะไรและจะใช้ทั้งหมดได้อย่างไร?

ฉันเดาว่าsudo apt-get install rubyไม่แนะนำให้ทำ a แต่ฉันไม่แน่ใจ ฉันลองใช้กับระบบของฉันนอกเหนือจาก 'ทุกสิ่งที่ Ruby อื่น ๆ ' มันเป็นเพียงการเพิ่มความสับสนของฉัน ฉันไม่ได้พูดถึง Rails แต่เป็นเพียงอัญมณี Ruby ทั่วไป (เช่น Vagrant, Chef, scripts)

คำตอบ:


184

ตามคำตอบก่อนหน้านี้ค่อนข้างครอบคลุมดังนั้นให้พิจารณาคำแนะนำสั้น ๆ นี้

อัญมณีเป็นวิธีการบรรจุไลบรารี Ruby พวกเขาคือ Ruby ที่เป็นไหของ Java ภายในไฟล์ gem คุณจะพบรหัส Ruby (ไฟล์. rb) แต่ยังทำการทดสอบและไฟล์พิเศษที่ให้ข้อมูลเกี่ยวกับอัญมณีเช่นชื่อการอ้างอิงและเวอร์ชัน ( gemspec ) โปรเจ็กต์ Ruby ใด ๆ สามารถกำหนดอัญมณีที่ต้องการผ่าน Gemfileที่ต้องการเพียงแค่ประกาศการอ้างอิง Rubygemsเป็นชื่อของตัวจัดการแพ็คเกจ - เครื่องมือที่ใช้ในการติดตั้งแพ็คเกจ (ในขณะที่อัญมณีเป็นแพ็คเกจเอง) ตอนนี้ Rubygems เป็นส่วนหนึ่งของ Ruby

Bundlerคือสิ่งที่ทำให้การจัดการอัญมณีเป็นเรื่องที่น่าจดจำ ขึ้นอยู่กับ Gemfile ของคุณการเรียกบันเดิลเลอร์โดยใช้การติดตั้งบันเดิลจะดาวน์โหลดและติดตั้งอัญมณีที่จำเป็นทั้งหมด เมื่อใช้คำสั่ง gem มาตรฐานคุณจะต้องติดตั้งแต่ละคำสั่งด้วยตนเองโดยใช้gem install <gem_name>. Bundler ไม่ได้เป็นส่วนหนึ่งของ Ruby (ตัวมันเองบรรจุเป็นอัญมณี ) แต่เป็น "มาตรฐานโดยพฤตินัย" สำหรับแอปพลิเคชันส่วนใหญ่ (คุณจะไม่พบว่ามีคนจำนวนมากไม่ได้ใช้งานและไม่มีเหตุผลที่ดีที่จะไม่ใช้จริง)

RVMเป็นเครื่องมือที่ช่วยให้คุณสามารถติดตั้ง Ruby หลายเวอร์ชันบนเครื่องโดยสลับไปมาระหว่างกันได้เมื่อจำเป็น สามารถใช้เพื่อติดตั้งทั้ง Ruby 1.8 และ 1.9 หรือแม้กระทั่ง "MRI" (Matz's Ruby, การใช้งานเริ่มต้น) และทางเลือกอื่น (เช่น JRuby หรือ Rubinius) โปรดทราบว่า RVM ไม่ได้อยู่คนเดียวในสนามนี้ดูตัวอย่างrbenv

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

System Rubyคือเมื่อใช้ RVM เวอร์ชัน Ruby ที่ติดตั้งบนเครื่อง (กล่าวคือไม่ใช่ผ่าน RVM)

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


1
คำตอบที่ดีคุณช่วยชี้แจงได้ไหม: อัญมณีและ RubyGems ต่างกันอย่างไร? และระหว่าง gemspec กับ Gemfile? นอกจากนี้โปรแกรมใดต่อไปนี้ (เช่นบันเดิลเลอร์) ที่ระบุไว้ข้างต้นรวมอยู่ใน 'Ruby' และแอปพลิเคชันใดแยกต่างหาก (ฉันเชื่อว่า RVM แยกต่างหาก) และ gemset เป็นเพียงแนวคิดภายใน RVM เท่านั้นหรืออยู่ใน Core Ruby เช่นกัน (หรือสิ่งอื่น ๆ เช่น rbenv ที่กล่าวถึงในคำตอบอื่น ๆ )? และถ้าบันเดิลเลอร์ทำให้การจัดการอัญมณีง่ายขึ้นวิธีการทำพรีบันเดิลเลอร์คืออะไร? (เช่นคุณจะจัดการอัญมณีโดยไม่ต้องบันเดิลเลอร์ได้อย่างไรฉันก็รู้ดีแม้ว่าฉันจะไม่เคยทำแบบนั้นก็ตาม) ขอบคุณ!
user779159

Rubygems จึงเป็นชื่อของตัวจัดการแพ็คเกจซึ่งคุณเรียกใช้ด้วยคำสั่ง 'gem'? และบันเดิลเลอร์ก็เป็นส่วนหนึ่งของ Ruby เช่นเดียวกับ Rubygems หรือฉันจำเป็นต้องรวมไว้ด้วยหรือไม่?
user779159

2
"ถ้าคุณเพิ่งเริ่มต้น ... [y] คุณสามารถปล่อยให้ RVM ... เว้นแต่คุณจะใช้ OS X และโปรเจ็กต์ Ruby ที่คุณต้องการติดตั้งและเรียกใช้จะขึ้นอยู่กับ Ruby เวอร์ชันที่ใหม่กว่าที่ติดตั้งมาล่วงหน้าในระบบปฏิบัติการ จากนั้นคุณจะต้องใช้ RVM
Hephaestus

สิ่งนี้ไม่เป็นความจริง: "การใช้คำสั่ง gem มาตรฐานคุณจะต้องติดตั้งแต่ละคำสั่งด้วยตนเอง" คุณสามารถติดตั้งอัญมณีทั้งหมดใน gemfile ของคุณได้โดยใช้คำสั่งเดียว "gem install"
Andy

1

คุณกำลังขอข้อมูลเพิ่มเติมในคำถามเดียวนอกเหนือจากที่อยู่ในขอบเขตของ Stack Overflow เพื่อให้ครอบคลุมทั้งหมดจะต้องใช้หนังสือ

บน Ubuntu การติดตั้งและลบอัญมณีลงใน Ruby เวอร์ชัน "system" เป็นเรื่องง่ายดังนั้นควรทำความคุ้นเคยกับการติดตั้งและลบอัญมณีทั่วไปผ่านsudoไฟล์. (สำหรับ Mac OS ฉันจะให้คำแนะนำที่แตกต่างออกไปเพราะ Apple รวม Ruby ไว้สำหรับการใช้งานของพวกเขาเองและไม่ใช่ความคิดที่ดีที่จะยุ่งกับมัน) จากนั้นเมื่อคุณมีความคิดว่าไอเดียอัญมณีทั้งหมดทำงานอย่างไรและคุณรู้ว่าคุณต้องการหลาย ๆ เวอร์ชัน Ruby ในระบบของคุณลอง " rbenv " หรือ " RVM " และติดตั้งเวอร์ชันหรือสองเวอร์ชันในแซนด์บ็อกซ์ของคุณ

Linux ทำให้ง่ายต่อการเพิ่ม / ลบ Ruby ผ่านการแจกจ่าย แต่เรา จำกัด เฉพาะเวอร์ชันที่ผู้ดูแลระบบ distro บรรจุไว้ดังนั้นฉันมักจะติดตั้งจากแหล่งที่มา แต่นั่นเป็นความเจ็บปวดเมื่อจัดการ Ruby หลายเวอร์ชันสำหรับระบบการพัฒนาการทดสอบและการผลิตซึ่งเป็นสาเหตุที่ทำให้ rbenvและRVMถูกคิดค้นขึ้น - พวกเขาจัดการกับรายละเอียดที่สกปรกทำให้เรามีสมาธิในการเขียนโปรแกรม

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

กฎข้อหนึ่งเมื่อทำการดีบักคือทำการเปลี่ยนแปลงทีละรายการซึ่งเป็นจริงสำหรับการเรียนรู้การเขียนโปรแกรมหรือเรียนรู้ภาษาใหม่ อย่าวอกแวกเพียงแค่ทำให้มันเรียบง่าย


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