Penjelasan singkat: rbenv bekerja dengan menghubungkan ke lingkungan Anda PATH. Konsepnya sederhana, tetapi iblis ada dalam rinciannya; sendok penuh di bawah ini.
Pertama, rbenv menciptakan shims untuk semua perintah ( ruby, irb, rake, gemdan sebagainya) di semua versi Anda terpasang Ruby. Proses ini disebut pengulangan . Setiap kali Anda menginstal Ruby versi baru atau memasang permata yang menyediakan perintah, jalankan rbenv rehashuntuk memastikan setiap perintah baru tidak diikutsertakan.
Shims ini hidup dalam satu direktori ( ~/.rbenv/shimssecara default). Untuk menggunakan rbenv, Anda hanya perlu menambahkan direktori shims di bagian depan PATH:
export PATH="$HOME/.rbenv/shims:$PATH"
Kemudian setiap kali Anda menjalankan rubydari baris perintah, atau menjalankan skrip yang dibaca oleh shebang #!/usr/bin/env ruby, sistem operasi Anda akan menemukannya ~/.rbenv/shims/rubyterlebih dahulu dan menjalankannya alih-alih rubyexecutable lain yang mungkin telah Anda instal.
Setiap shim adalah skrip Bash kecil yang pada gilirannya berjalan rbenv exec. Jadi dengan rbenv di jalur Anda, irbsama dengan rbenv exec irb, dan ruby -e "puts 42"setara dengan rbenv exec ruby -e "puts 42".
The rbenv exectokoh perintah apa versi Ruby yang ingin Anda gunakan, kemudian menjalankan perintah yang sesuai untuk versi itu. Begini caranya:
- Jika
RBENV_VERSIONvariabel lingkungan diatur, nilainya menentukan versi Ruby untuk digunakan.
- Jika direktori kerja saat ini memiliki
.rbenv-versionfile, isinya digunakan untuk mengatur RBENV_VERSIONvariabel lingkungan.
- Jika tidak ada
.rbenv-versionfile di direktori saat ini, rbenv mencari setiap direktori induk untuk suatu .rbenv-versionfile sampai menyentuh root sistem file Anda. Jika ditemukan, isinya digunakan untuk mengatur RBENV_VERSIONvariabel lingkungan.
- Jika
RBENV_VERSIONmasih belum disetel, rbenv mencoba mengaturnya menggunakan konten ~/.rbenv/versionfile.
- Jika tidak ada versi yang ditentukan di mana saja, rbenv mengasumsikan Anda ingin menggunakan Ruby "sistem" —yaitu versi apa pun yang akan dijalankan jika rbenv tidak ada di jalur Anda.
(Anda dapat mengatur versi Ruby khusus proyek dengan rbenv localperintah, yang membuat .rbenv-versionfile di direktori saat ini. Demikian pula, rbenv globalperintah memodifikasi ~/.rbenv/versionfile.)
Dipersenjatai dengan RBENV_VERSIONvariabel lingkungan, rbenv menambah ~/.rbenv/versions/$RBENV_VERSION/binbagian depan Anda PATH, kemudian mengeksekusi perintah dan argumen yang diteruskan rbenv exec. Voila!
Untuk melihat secara seksama apa yang terjadi di bawah tenda, coba setel RBENV_DEBUG=1dan jalankan perintah Ruby. Setiap perintah Bash yang dijalankan rbenv akan ditulis ke terminal Anda.
Sekarang, rbenv hanya peduli dengan beralih versi, tetapi ekosistem plugin yang berkembang akan membantu Anda melakukan segalanya mulai dari menginstal Ruby hingga mengatur lingkungan Anda , mengelola "permata" dan bahkan mengotomatisasibundle exec .
Saya tidak yakin apa yang harus dilakukan dukungan IRC dengan beralih versi Ruby, dan rbenv dirancang untuk menjadi sederhana dan cukup dimengerti untuk tidak memerlukan dukungan. Tetapi jika Anda membutuhkan bantuan, pelacak masalah dan Twitter hanya dengan beberapa klik saja.
Pengungkapan: Saya adalah penulis rbenv, ruby-build, dan rbenv-vars.