bundler vs RVM vs gems vs RubyGems vs gemsets vs system ruby ​​[закрито]


102

Я новачок у Ruby і намагаюся обернути голову навколо наступних концепцій: bundler vs RVM vs gems vs RubyGems vs gemsets vs system rub, і я розгублений.

Чи може хтось, будь ласка, описати "найкращу практику" того, як я повинен керувати усім цим у новій версії останньої версії Ubuntu? Що потрібно встановити, і як я повинен це все використовувати?

Я здогадуюсь, що робити заняття sudo apt-get install rubyне рекомендується, але я не впевнений. Я спробував це в моїй системі на додаток до "всіх інших матеріалів Ruby". Це просто додає моєї плутанини. Я не говорю про Rails, а лише про звичайні дорогоцінні камені Ruby (наприклад, Vagrant, шеф-кухар, сценарії).

Відповіді:


184

Відповідно до попередньої відповіді, це досить багато для висвітлення, тому вважайте це коротким вступом.

дорогоцінні камені - це спосіб упаковки бібліотек Ruby. Вони полягають у Ruby, що баночки для Java. Всередині файлу дорогоцінного каміння ви знаходите код Ruby (.rb файли), а також тести та спеціальний файл, що дає інформацію про сам дорогоцінний камінь, наприклад його назву, залежності та версію ( gemspec ). Будь-який проект Ruby може визначити потрібні дорогоцінні камені за допомогою Gemfile, який просто повинен оголосити залежності. Rubygems - це назва менеджера пакунків - інструмент, який використовується для встановлення пакетів (тоді як дорогоцінні камені - це самі пакети). Rubygems зараз є частиною Ruby.

Bundler - це те, що робить управління дорогоцінними каменями нестерпним На основі вашого Gemfile, простий дзвінок до постачальника за допомогою пакетної установки встановить і встановить усі необхідні дорогоцінні камені. Використовуючи стандартну команду gem, вам доведеться встановлювати кожен з них вручну, використовуючиgem install <gem_name>. Bundler не є частиною Ruby (він сам упакований як дорогоцінний камінь ), але це "фактичний стандарт" для більшості застосунків (ви не знайдете багатьох людей, які не користуються ним, і жодних вагомих причин не використовувати його насправді).

RVM - це інструмент, що дозволяє встановлювати кілька версій Ruby на машину, перемикаючи їх між собою за потреби. Це можна використовувати для встановлення Ruby 1.8 та 1.9, або навіть "MRI" (Matz's Ruby, реалізація за замовчуванням) та альтернативи (наприклад, JRuby або Rubinius). Зауважте, що RVM не один в цьому полі, див., Наприклад, rbenv .

Набір дорогоцінних каменів в RVM - це набір дорогоцінних каменів, характерних для даного контексту, як правило, для проекту. Це корисно, якщо ви, наприклад, розробляєте різні програми, кожне зі своїми наборами дорогоцінних каменів, і хочете залишати їх окремими.

Система Ruby - це при використанні RVM версія Ruby, встановлена ​​на машині (тобто не через RVM).

Якщо ви тільки починаєте, дорогоцінні камені та постачальник цікавлять вас. Ви можете відпустити RVM та gemsets поки вбік.


1
Хороша відповідь, чи можете ви уточнити: чим відрізняється дорогоцінні камені від RubyGems? А між gemspec та Gemfile? Крім того, яка з перерахованих вище програм (наприклад, постачальник пакетів) включена до "Ruby", а які - окремі програми (я вважаю, що RVM є окремим)? І чи gemset є лише поняттям лише в RVM, чи воно також є в межах ядра Ruby (або інших речей, як rbenv, згаданий в іншій відповіді)? І якщо постачальник спрощує керування дорогоцінними каменями, то яким чином це було у попереднього постачальника? (тобто як би ви керували дорогоцінними каменями без пачка, просто так я знаю, навіть якби я ніколи цього не зробив.) Дякую!
user779159

Отже, Rubygems - це ім'я менеджера пакунків, якого ви викликаєте командою 'gem'? І бундер також є частиною самого Ruby, як Rubygems, чи мені потрібно якось його включати?
користувач779159

2
"Якщо ви тільки починаєте ... [y] ou поки можете відпустити RVM ..." Якщо ви не перебуваєте на OS X, і проект Ruby, який ви хочете встановити та запустити, залежить від більш пізньої версії Ruby, ніж тієї, яка попередньо встановлена ​​в ОС. Тоді вам знадобиться RVM.
Гефест

Це неправда: "Використовуючи стандартну команду gem, вам доведеться встановити кожну з них вручну." Ви можете точно встановити всі дорогоцінні камені у своєму gemfile за допомогою однієї команди "встановити дорогоцінний камінь"
Енді

1

Ви задаєте більше інформації в одному питанні, ніж це стосується Stack Overflow. Для його висвітлення знадобиться книга.

В Ubuntu легко встановлювати та видаляти дорогоцінні камені до "системної" версії Ruby, тому звикайте встановлювати та видаляти звичайні дорогоцінні камені через sudo. (У Mac OS я б давав різні поради, тому що Apple в'язує Ruby для власного використання, і це не чудова ідея з цим возитися.) Потім, коли ви маєте уявлення про те, як працює вся ідея про дорогоцінний камінь, і ви знаєте, що хочете кілька Запустіть версії у вашій системі, спробуйте " rbenv " або " RVM " та встановіть у своїй пісочниці версію чи дві.

Linux дозволяє легко додавати / видаляти Ruby через дистрибутив, але ми обмежені версіями, які постачали диспетчери дистрибутива, тому я зазвичай встановлюю з джерела. Але це біль при управлінні декількома версіями Ruby для систем розробки, тестування та виробництва, саме тому rbenv і RVM були винайдені - вони обробляють брудні деталі, що дозволяють сконцентруватися на програмуванні.

Я використовував і rbenv, і RVM , і використовував rbenv протягом останніх півроку або близько того, з хорошими результатами. Це менш складно, ніж RVM, який мені подобається. У будь-якому випадку вони спрощують встановлення різних версій, з окремими наборами дорогоцінних каменів. Якщо ви хочете, ви можете відкрити різні версії Ruby у різних вікнах терміналів, що полегшує тестування на сумісність.

Правило одне під час налагодження - це внесення змін по черзі, що справедливо для навчання програмуванню або вивчення нової мови. Не відволікайтеся, просто тримайте це просто.


1
Ніколи не звертайтеся до будь-якого менеджера пакунків, окрім вашого системного менеджера пакунків за замовчуванням (наприклад, apt або apt-get). Ви неминуче зіпсуєте свою систему.
зображення
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.