bundler vs RVM vs permata vs RubyGems vs permata vs ruby ​​sistem [ditutup]

102

Saya baru mengenal Ruby dan mencoba memahami konsep-konsep berikut: bundler vs RVM vs permata vs RubyGems vs permata vs sistem gosok dan saya bingung.

Bisakah seseorang menjelaskan 'praktik terbaik' tentang bagaimana saya harus mengelola semua ini pada instalasi baru dari versi terbaru Ubuntu? Apa yang harus saya instal, dan bagaimana saya harus menggunakan semuanya?

Saya menduga bahwa melakukan a sudo apt-get install rubytidak disarankan, tetapi saya tidak yakin. Saya mencobanya di sistem saya selain 'semua barang Ruby lainnya'. Itu hanya menambah kebingungan saya. Saya tidak berbicara tentang Rails tetapi hanya permata Ruby biasa (misalnya Gelandangan, Koki, skrip).

pengguna779159
sumber

Jawaban:

184

Sesuai jawaban sebelumnya, ini cukup banyak untuk dibahas, jadi pertimbangkan ini sebagai pengantar singkat.

permata adalah cara pustaka Ruby dikemas. Mereka adalah untuk Ruby apa toples untuk Java. Di dalam file permata, Anda menemukan kode Ruby (file .rb), tetapi juga tes, dan file khusus yang memberikan informasi tentang permata itu sendiri, seperti nama, dependensi, dan versinya ( gemspec ). Proyek Ruby apa pun dapat menentukan permata yang dibutuhkan melalui Gemfile yang hanya perlu mendeklarasikan dependensi. Rubygems adalah nama manajer paket - alat yang digunakan untuk menginstal paket (sedangkan permata adalah paket itu sendiri). Rubygems sekarang menjadi bagian dari Ruby.

Bundler adalah apa yang membuat pengelolaan permata bisa diterima. Berdasarkan Gemfile Anda, panggilan sederhana ke bundler menggunakan penginstalan bundel akan mengunduh dan menginstal semua permata yang diperlukan. Dengan menggunakan perintah gem standar, Anda harus menginstal masing-masing secara manual, menggunakangem install <gem_name>. Bundler bukanlah bagian dari Ruby (ia sendiri dikemas sebagai permata ), tetapi merupakan "standar de facto" untuk sebagian besar aplikasi (Anda tidak akan menemukan banyak orang yang tidak menggunakannya, dan sebenarnya tidak ada alasan yang baik untuk tidak menggunakannya).

RVM adalah alat yang memungkinkan Anda menginstal beberapa versi Ruby pada mesin, beralih di antaranya saat diperlukan. Ini dapat digunakan untuk menginstal Ruby 1.8 dan 1.9, atau bahkan "MRI" (Ruby Matz, implementasi default) dan alternatif (seperti JRuby atau Rubinius). Perhatikan bahwa RVM tidak sendirian di bidang ini, lihat misalnya rbenv .

Sebuah gemset di RVM adalah satu set permata khusus untuk konteks tertentu, biasanya sebuah proyek. Ini berguna jika Anda misalnya mengembangkan aplikasi yang berbeda, masing-masing dengan kumpulan permata sendiri, dan ingin memisahkannya.

sistem Ruby adalah, ketika menggunakan RVM, versi Ruby diinstal pada mesin (yaitu, bukan melalui RVM).

Jika Anda baru memulai, permata dan bundler menarik bagi Anda. Anda dapat mengesampingkan RVM dan gemsets untuk saat ini.

Martin
sumber
1
Jawaban bagus, bisakah Anda menjelaskan: Apa perbedaan antara permata dan RubyGems? Dan antara gemspec dan Gemfile? Juga, mana dari program ini (misalnya bundler) yang tercantum di atas yang disertakan dengan 'Ruby' dan mana yang merupakan aplikasi terpisah (saya yakin RVM terpisah)? Dan apakah gemset hanya sebuah konsep hanya dalam RVM atau dalam inti Ruby juga (atau hal lain, seperti rbenv yang disebutkan di jawaban lain)? Dan jika bundler membuat pengelolaan permata lebih mudah, apa cara pra-bundler untuk melakukannya? (yaitu Bagaimana Anda mengelola permata tanpa bundler, asal saya tahu, meskipun saya tidak pernah melakukannya dengan cara itu.) Terima kasih!
pengguna779159
Jadi Rubygems adalah nama pengelola paket, yang Anda panggil dengan perintah 'gem'? Dan apakah bundler juga merupakan bagian dari Ruby itu sendiri, seperti halnya Rubygems, atau apakah saya perlu memasukkannya?
pengguna779159
2
"Jika Anda baru memulai ... [y] Anda dapat membiarkan RVM ... menyamping untuk saat ini." Kecuali Anda menggunakan OS X, dan proyek Ruby yang ingin Anda instal dan jalankan bergantung pada versi Ruby yang lebih baru daripada versi yang sudah diinstal sebelumnya di OS. Maka Anda akan membutuhkan RVM.
Hephaestus
Ini tidak benar: "Menggunakan perintah gem standar, Anda harus menginstal masing-masing secara manual." Anda pasti dapat menginstal semua permata di file permata Anda menggunakan satu perintah "gem install"
Andy
1

Anda meminta lebih banyak informasi dalam satu pertanyaan daripada yang ada dalam cakupan untuk Stack Overflow. Untuk menutupinya semua butuh sebuah buku.

Di Ubuntu, mudah untuk menginstal dan menghapus permata ke versi "sistem" dari Ruby, jadi biasakan untuk menginstal dan menghapus permata biasa melalui sudo. (Di Mac OS saya akan memberikan saran yang berbeda karena Apple membundel Ruby untuk digunakan sendiri dan bukan ide yang bagus untuk mengacaukannya.) Kemudian, ketika Anda memiliki ide bagaimana keseluruhan ide permata bekerja, dan Anda tahu Anda menginginkan banyak Versi Ruby di sistem Anda, coba " rbenv " atau " RVM " dan instal satu atau dua versi di kotak pasir Anda.

Linux memudahkan untuk menambah / menghapus Ruby melalui distribusi, tetapi kami terbatas pada versi yang telah dipaketkan oleh pengelola distro, jadi saya biasanya menginstal dari sumber. Tapi, itu merepotkan ketika mengelola beberapa versi Ruby untuk pengembangan, pengujian dan sistem produksi, itulah sebabnya rbenv dan RVM diciptakan - mereka menangani detail kotor yang memungkinkan kita berkonsentrasi pada pemrograman.

Saya telah menggunakan rbenv dan RVM , dan telah menggunakan rbenv selama enam bulan terakhir ini, dengan hasil yang bagus. Ini tidak serumit RVM yang saya suka. Dalam kedua kasus tersebut, mereka membuatnya mudah untuk menginstal versi yang berbeda, dengan set Permata yang terpisah. Anda dapat membuka versi Ruby yang berbeda di jendela terminal yang berbeda jika Anda mau, sehingga mudah untuk menguji kompatibilitasnya.

Aturan satu saat debugging adalah membuat perubahan satu per satu, yang berlaku untuk belajar program atau belajar bahasa baru. Jangan teralihkan, buat sederhana saja.

Manusia Timah
sumber
1
Jangan pernah sudo manajer paket apa pun selain manajer paket sistem default Anda (misalnya apt atau apt-get). Anda pasti akan mengacaukan sistem Anda.
gambar