คำอธิบายสั้น ๆ : rbenv ทำงานโดยเชื่อมต่อกับสภาพแวดล้อมของPATHคุณ แนวคิดนั้นง่าย แต่ปีศาจอยู่ในรายละเอียด ตักเต็มรูปแบบด้านล่าง
ครั้งแรก rbenv สร้างshimsสำหรับคำสั่งทั้งหมด ( ruby, irb, rake, gemและอื่น ๆ ) ข้ามรุ่นที่ติดตั้งทั้งหมดของคุณจากทับทิม กระบวนการนี้เรียกว่าrehashing ทุกครั้งที่คุณติดตั้ง Ruby เวอร์ชันใหม่หรือติดตั้ง gem ที่จัดเตรียมคำสั่งให้รันrbenv rehashเพื่อให้แน่ใจว่าคำสั่งใหม่ใด ๆ ถูกกำหนดไว้
shims เหล่านี้มีชีวิตอยู่ในไดเรกทอรีเดียว ( ~/.rbenv/shimsโดยค่าเริ่มต้น) ในการใช้ rbenv คุณต้องเพิ่มไดเรกทอรี shims ไว้ด้านหน้าPATH:
export PATH="$HOME/.rbenv/shims:$PATH"
จากนั้นเมื่อใดก็ตามที่คุณเรียกใช้rubyจากบรรทัดคำสั่งหรือเรียกใช้สคริปต์ที่มี shebang อ่าน#!/usr/bin/env rubyอยู่ระบบปฏิบัติการของคุณจะค้นหา~/.rbenv/shims/rubyก่อนและเรียกใช้งานแทนที่จะเป็นอื่น ๆrubyปฏิบัติการคุณอาจติดตั้ง
ชิมแต่ละตัวเป็นสคริปต์ Bash ขนาดเล็กที่ทำงานในทางกลับrbenv execกัน ดังนั้นด้วย rbenv ในเส้นทางของคุณirbเท่ากับrbenv exec irbและruby -e "puts 42"เทียบเท่าrbenv exec ruby -e "puts 42"เทียบเท่ากับ
rbenv execตัวเลขคำสั่งออกจากสิ่งที่รุ่นของทับทิมคุณต้องการใช้งานแล้วรันคำสั่งที่เกี่ยวข้องสำหรับรุ่นที่ นี่คือวิธี:
- หากว่า
RBENV_VERSIONตั้งค่าตัวแปรสภาพแวดล้อมค่าของมันจะเป็นตัวกำหนดรุ่นของ Ruby ที่จะใช้
- หากไดเร็กทอรีการทำงานปัจจุบันมี
.rbenv-versionไฟล์เนื้อหาจะถูกใช้เพื่อตั้งค่าRBENV_VERSIONตัวแปรสภาพแวดล้อม
- หากไม่มี
.rbenv-versionไฟล์ในไดเร็กทอรีปัจจุบัน rbenv จะค้นหาไดเร็กทอรีพาเรนต์แต่ละ.rbenv-versionไฟล์จนกว่าจะพบกับรูตของระบบไฟล์ของคุณ หากพบหนึ่งเนื้อหาจะถูกใช้เพื่อตั้งค่าRBENV_VERSIONตัวแปรสภาพแวดล้อม
- หาก
RBENV_VERSIONยังไม่ได้ตั้งค่า rbenv จะพยายามตั้งค่าโดยใช้เนื้อหาของ~/.rbenv/versionไฟล์
- หากไม่มีการระบุรุ่นใด ๆ rbenv จะถือว่าคุณต้องการใช้ "ระบบ" Ruby - เช่นเวอร์ชันใดที่จะทำงานหาก rbenv ไม่ได้อยู่ในเส้นทางของคุณ
(คุณสามารถตั้งค่าเวอร์ชัน Ruby เฉพาะโครงการได้ด้วยrbenv localคำสั่งซึ่งจะสร้าง.rbenv-versionไฟล์ในไดเรกทอรีปัจจุบันเช่นเดียวกันrbenv globalคำสั่งจะแก้ไข~/.rbenv/versionไฟล์)
อาวุธที่มีRBENV_VERSIONตัวแปรสภาพแวดล้อม rbenv เพิ่ม~/.rbenv/versions/$RBENV_VERSION/binไว้ด้านหน้าของคุณPATHจากนั้นเรียกใช้คำสั่งและอาร์กิวเมนต์ที่ส่งไปยังrbenv execแล้วผู้บริหารคำสั่งและการขัดแย้งผ่านไปVoila!
หากต้องการดูสิ่งที่เกิดขึ้นภายใต้ประทุนอย่างละเอียดลองตั้งค่าRBENV_DEBUG=1และเรียกใช้คำสั่ง Ruby ทุกคำสั่ง Bash ที่ rbenv ทำงานจะถูกเขียนไปยังเทอร์มินัลของคุณ
ตอนนี้ rbenv เป็นห่วงเพียงกับรุ่นเปลี่ยน แต่ระบบนิเวศที่เจริญรุ่งเรืองของปลั๊กอินจะช่วยให้คุณทำทุกอย่างจากการติดตั้งทับทิมที่จะตั้งค่าสภาพแวดล้อมของคุณ , การจัดการ "gemsets"และแม้กระทั่งการทำงานอัตโนมัติbundle execการทำงานอัตโนมัติ
ฉันไม่แน่ใจว่าสิ่งที่สนับสนุน IRC เกี่ยวข้องกับการสลับรุ่น Ruby และ rbenv ได้รับการออกแบบให้เรียบง่ายและเข้าใจง่ายพอที่จะไม่ต้องการการสนับสนุน แต่หากคุณต้องการความช่วยเหลือตัวติดตามปัญหาและ Twitter เป็นเพียงไม่กี่คลิก
การเปิดเผยข้อมูล: ฉันเป็นผู้แต่ง rbenv, ruby-build และ rbenv-vars