คำอธิบายสั้น ๆ : 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