ผมขอแนะนำให้direnv มันเป็นสภาพแวดล้อมสำหรับการสลับเปลือก
ก่อนที่แต่ละพรอมต์จะตรวจสอบว่ามีไฟล์ ".envrc" ในไดเรกทอรีปัจจุบันและพาเรนต์หรือไม่ หากไฟล์นั้นมีอยู่ (และได้รับอนุญาต) ไฟล์นั้นจะถูกโหลดลงในเชลล์ย่อยของ bash และตัวแปรที่ส่งออกทั้งหมดจะถูกดักจับโดย direnv จากนั้นทำให้พร้อมใช้งานเชลล์ปัจจุบัน
นี่คือวิธีการใช้ direnvกับ ruby-install
+ ทับทิมติดตั้ง
เพิ่มนี้ไป ~/.direnvrc
use_ruby() {
local ruby_root=$HOME/.rubies/$1
load_prefix "$ruby_root"
layout_ruby
}
ติดตั้ง ruby-install ( brew install ruby-install
) และติดตั้งทับทิมจำนวนมาก
ruby-install ruby 1.9.3
ruby-install ruby 2.0.0
ruby-install ruby 2.2.0
จากนั้นสร้าง symlink สองสามชุดเพื่อความสะดวก
ln -s .rubies/1.9 ruby-1.9.3-p*
ln -s .rubies/2.0 ruby-2.0.0
ln -s .rubies/2.2 ruby-2.2.0
และในที่สุดโครงการของใด ๆ.envrc
:
use ruby 2.0
สิ่งนี้จะทำให้พลอยทั้งหมดอยู่ใน.direnv/ruby
ไดเรกทอรีของโครงการ(ทำให้การเปิดพลอยง่ายขึ้น) Bundler จะใส่ไบนารีของ wrapper ใน .direnv/bin
(ไม่มากbundle exec
!)
+ rbenv
เป็นไปได้ที่จะใช้ rbenv ด้วยการเพิ่มuse rbenv
คำสั่งใน.envrc
ไฟล์ใดก็ได้ นี้จะเปิดใช้งาน rbenv ซึ่งจะใส่ ruby wrappers ในเส้นทาง
โปรดทราบว่าไม่จำเป็นต้องติดตั้ง rbenv ใน. bashrc หรือ. zshrc เพื่อให้ทำงานได้
+ RVM
นี่คือ. envrc ที่ซับซ้อนที่สุดที่ฉันใช้กับโครงการทับทิม:
rvm use 1.8.7
layout ruby
PATH_add .direnv/bundler-bin
rvm ใช้เพื่อเลือกรุ่นทับทิมที่ถูกต้องสำหรับคุณ
คำสั่งเลย์เอาต์ตั้งค่าตัวแปรสภาพแวดล้อมปกติบางอย่างโดยอัตโนมัติ สำหรับตอนนี้มีเพียงเลย์เอาต์ทับทิมเท่านั้น สิ่งที่มันถูกตั้งค่าตัวแปรสภาพแวดล้อม GEM_HOME และเป็นไดเรกทอรี bin ไปยังเส้นทางของคุณ เนื่องจากมันขึ้นอยู่กับรุ่นทับทิมตรวจสอบให้แน่ใจว่าได้เรียกมันหลังจาก "rvm" เนื่องจากแต่ละไดเรกทอรีเค้าโครงทับทิมมี GEM_HOME ของตัวเองคุณไม่จำเป็นต้องใช้ gemsets RVM ของ
PATH_add prepends และขยายเส้นทางสัมพัทธ์ที่กำหนด ในกรณีนี้ฉันใช้สิ่งนี้เพื่อแยก binstubs ของ Bundler ออกจากสคริปต์ bin ของฉันเองด้วยbundle install --binstubs .direnv/bundler-bin
หากคุณต้องการทราบว่าคำสั่งเหล่านั้นทำอะไรกันตอนนี้: cat direnv stdlib
| น้อยกว่า