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
, gem
dan 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 rehash
untuk memastikan setiap perintah baru tidak diikutsertakan.
Shims ini hidup dalam satu direktori ( ~/.rbenv/shims
secara 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 ruby
dari baris perintah, atau menjalankan skrip yang dibaca oleh shebang #!/usr/bin/env ruby
, sistem operasi Anda akan menemukannya ~/.rbenv/shims/ruby
terlebih dahulu dan menjalankannya alih-alih ruby
executable lain yang mungkin telah Anda instal.
Setiap shim adalah skrip Bash kecil yang pada gilirannya berjalan rbenv exec
. Jadi dengan rbenv di jalur Anda, irb
sama dengan rbenv exec irb
, dan ruby -e "puts 42"
setara dengan rbenv exec ruby -e "puts 42"
.
The rbenv exec
tokoh perintah apa versi Ruby yang ingin Anda gunakan, kemudian menjalankan perintah yang sesuai untuk versi itu. Begini caranya:
- Jika
RBENV_VERSION
variabel lingkungan diatur, nilainya menentukan versi Ruby untuk digunakan.
- Jika direktori kerja saat ini memiliki
.rbenv-version
file, isinya digunakan untuk mengatur RBENV_VERSION
variabel lingkungan.
- Jika tidak ada
.rbenv-version
file di direktori saat ini, rbenv mencari setiap direktori induk untuk suatu .rbenv-version
file sampai menyentuh root sistem file Anda. Jika ditemukan, isinya digunakan untuk mengatur RBENV_VERSION
variabel lingkungan.
- Jika
RBENV_VERSION
masih belum disetel, rbenv mencoba mengaturnya menggunakan konten ~/.rbenv/version
file.
- 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 local
perintah, yang membuat .rbenv-version
file di direktori saat ini. Demikian pula, rbenv global
perintah memodifikasi ~/.rbenv/version
file.)
Dipersenjatai dengan RBENV_VERSION
variabel lingkungan, rbenv menambah ~/.rbenv/versions/$RBENV_VERSION/bin
bagian 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=1
dan 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.
Saya menulis artikel mendalam: http://niczsoft.com/2011/11/what-you-should-know-about-rbenv-and-rvm/
Perbedaan mendasar adalah di mana lingkungan shell diubah:
Juga, hal tentang RVM adalah, ia mencakup lebih dari sekadar mengelola Rubi, ia memiliki lebih banyak daripada alat lainnya (ada yang lain selain RVM dan rbenv: https://twitter.com/#!/mpapis/ status / 171714447910502401 )
Jangan lupa tentang dukungan instan yang Anda dapatkan di IRC di saluran "#rvm" di server Freenode.
sumber
Jadi untuk meringkas jawaban yang sangat baik di atas, perbedaan praktis utama antara RVM dan rbenv adalah ketika versi Ruby dipilih.
rbenv:
rbenv menambahkan shim ke awal jalur Anda, perintah dengan nama yang sama dengan Ruby. Ketika Anda mengetik
ruby
pada baris perintah, shim dijalankan sebagai gantinya (karena itu juga disebut "ruby" dan datang pertama kali di jalan). Shim mencari variabel lingkungan atau.rbenv_version
file untuk menentukan versi Ruby mana yang akan didelegasikan.RVM:
RVM memungkinkan Anda untuk mengatur versi Ruby secara langsung dengan menelepon
rvm use
. Selain itu, ini juga mengesampingkancd
perintah sistem. Saat Andacd
masuk ke folder yang berisi.rvmrc
file, kode di dalam.rvmrc
file dieksekusi. Ini dapat digunakan untuk mengatur versi Ruby, atau apa pun yang Anda suka.Perbedaan lainnya:
Tentu saja ada perbedaan lain. RVM memiliki permata di luar kotak, sementara rbenv hanya membutuhkan sedikit peretasan (tapi tidak banyak). Keduanya merupakan solusi fungsional untuk masalah tersebut.
sumber
Perbedaan utamanya adalah kapan dan bagaimana ruby diaktifkan . Ruby diaktifkan:
RVM mengandalkan
cd
perintah yang dimodifikasi dan pemilihan manual Ruby olehrvm use
. rbenv menggunakan pembungkus atau "shims" untuk semua perintah ruby dasar sebagai mekanisme default untuk memilih ruby. RVM membuat pembungkus untuk alat-alat baris perintah dasar seperti permata, menyapu, ruby, juga. Mereka digunakan misalnya di CronJobs (lihat http://rvm.io/integration/cron/ ), tetapi itu bukan mekanisme default untuk mengganti versi Ruby.Jadi kedua metode pilih "secara otomatis" versi Ruby yang tepat dengan menimpa perintah dan menggunakan pembungkus. rvm mengesampingkan perintah shell seperti cd. rbenv mengesampingkan semua perintah ruby dasar seperti ruby, irb, rake dan gem.
sumber
Memberi Anda sekitar:
Dan itu menambahkan:
untuk
$PATH
sumber