בכתבה זו, אשווה את הנציגים הפופולריים ביותר של מנהלי גרסאות ל-Ruby במערכת ההפעלה macOS: Chruby, Rbenv, ו-RVM, כמו גם Asdf, מנהל גרסאות לשפות תכנות מרובות, ו-Frum, מנהל גרסאות חדש כתוב ב-Rust. אציין המלצות על סמך מה שסביר להניח שתצטרך.
Ruby המותקן מראש איננה עבור מפתחים
אנשים חדשים ל-Ruby שמחים לגלות ש-Ruby מותקן מראש ב-macOS. לעתים קרובות הם מתאכזבים כשמפתח בעל נסיון מוסף להם, "אל תשתמשו ב-Ruby של מערכת המחשב של Mac". כתבתי במקום אחר על הסיבות לכך. בקצרה, Ruby המערכת קיים עבור macOS, לא עבורך. זה מספיק טוב להרצת תוכניות עזר, אך לצורך פיתוח, Ruby המערכת מאוחרת ואם אתה לא זהיר, התקנת ג'ימים עשויה לגרום לכאבי ראש (כולל הפרת אבטחת מערכת).
בעיה של אחד ב-Ruby של Homebrew
Homebrew הוא מנהל החבילות שהפך לסטנדרט כמעט להוספת תוכנת מפתח ל-macOS. Homebrew מקל על ההתקנה של גרסה חדשה של Ruby כדי להימנע מהסתמכות על Ruby של המערכת. אך יש שתי בעיות עם Homebrew. ראשית, גרסת Ruby של Homebrew עשויה להחלפות באופן אוטומטי ולא צפוי על ידי גרסה חדשה כשמתקינים חבילות נוספות של Homebrew (בעיית פתרון זו באמצעות brew pin ruby
). חשוב יותר, Homebrew מאפשר לך להתקין רק גרסה אחת של Ruby. אם אתה מפתח או משאיר פרויקטים רבים ב-Ruby, סביר להניח שתצטרך לעבור בין גרסאות של Ruby. כאן תצטרך מנהל גרסאות.
Asdf לשפות מרובות
Asdf הוא מנהל גרסאות המתאים לשפות מרובות. אם אתה משתמש ברובי לפיתוח יישומים אינטרנטיים עם ריילס 6, תצטרך להתקין נוד ויאר כדי לבנות אפליקציה ראשונית של ריילס. (ריילס 7 עשוי להשתחרר מהצורך בנוד, אך זה עדיין לא בטוח כרגע.)
לכן, עבור מפתח ריילס, Asdf הוא מנהל גרסאות אידאלי. הוא גם ישרת אותך היטב אם אתה מפתח אפליקציות בפייתון, אליקסיר, או בשפות רבות אחרות (ראה רשימת השפות המתמוגדות). האם יש חיסרון לשימוש ב-Asdf? רק שניים. הוא משתמש בשים כדי לעצור פקודות נפוצות, מה שיכול להקשות על פתרון בעיות. כמו כן, זה יכול להיות קצת איטי עבור כמה פעולות. אם אתה מפתח בשפות מרובות, אני ממליץ לך לנסות את Asdf כדי לראות אם אתה אוהב אותו. עבור ל-Frum, מנהל הגרסאות היחיד לרובי שכתוב ב-Rust, אם אתה מוצא ש-Asdf מאט אותך.
מנהלי גרסאות יחידי רובי
אם אתה רק מתכוון לפתח אפליקציות באמצעות רובי, בחר בין ארבעת מנהלי הגרסאות היחידי רובי: Chruby, Frum, Rbenv ו-RVM. ההבדלים בין ארבעתם נמצאים במהירות, מורכבות ובאיזו דרך כל אחד מחליף גרסאות רובי. בואו נבחן קודם את העתיק מבין הארבע: RVM.
RVM
RVM היה המנהיג הראשון בנושא ניהול גרסאות של Ruby. עדיין מתוחזק ונמצא בשימוש נרחב. RVM משנה את הפקודה cd
של המערכת כדי להגדיר משתני סביבה כשאתה משנה ספריות. כדי להתעלם מהפקודה cd
, תוכנית ההתקנה של RVM משנה את קובץ ההגדרות של השפה (קובץ ~/.zshrc
במקרה של מקס חדשים).
RVM מציג בצורה תקינה משתני סביבה כדי לחשוף את גרסת ה-Ruby והמיקום של ה-gem, מה שיכול לעזור באבחון בעיות. עם זאת, RVM כולל תכונות נוספות כגון gemsets. Gemsets כבר לא נחוצים, מאחר ו-Bundler נוסף ל-Ruby הליבה כדי לנהל תלותי gem. המורכבות הנוספת אינה נחוצה, ולכן רבים מפיתוחאים עברו למנהל גרסאות חדש כגון Rbenv, Chruby, או Frum.
Rbenv
יחד עם RVM, Rbenv היה בשימוש נרחב כמנהל גרסאות עבור Ruby. Rbenv משתמש ב-shims כדי לעבוד עם פקודות Ruby נפוצות. (Asdf גם משתמש ב-shims.)
לאחר התקנת Rbenv עם Homebrew, עליך לשנות את קובץ ~/.zshrc
שלך כך ש-shims של Rbenv יקבלו עדיפות על פקודות Ruby רגילות. ה-shim קורא את הפקודה rbenv exec
, שקובעת איזו גרסה של Ruby להשתמש לפני שמבצעים כל פקודת Ruby.
שימות בעלות שני חסרונות. קודם כל, שימות מקשה על פתרון בעיות על ידי הסתרת הפקודה האמיתית. לדוגמה, הפקודה which ruby
מראה את השימוש של Rbenv, לא את גרסת הרובי האמיתית (עליך להגדיר את משתנת הסביבה RBENV_DEBUG
אם אתה רוצה לראות את הפקודת הרובי האמיתית). שנית, שימות יכולות להוסיף מיקרו-שניות של עיכוב לביצוע פקודת הרובי. (Rbenv מתערב בכל פעם שאתה מפעיל פקודת רובי, לא כמו RVM, שמתערב רק כשאתה משנה ספרייה.) עבור מפתחים ששמים לב לעיכוב, או לא אוהבים את רעיון השימות, יש את Chruby או Frum.
Chruby
Chruby אינה ידועה כמו RVM או Rbenv, אך היא נתמכת על ידי מספר מפתחי רובי בולטים. לעומת RVM, היא לא מעבירה על פקודת ה-cd
. לעומת Rbenv או Asdf, היא לא מכסה פקודות באמצעות שימות. תצטרך לשנות את קובץ ה-~/.zshrc
שלך כדי ש-Chruby ירוץ בסביבת המשאבה המקומית שלך. אין צורך לשנות את $PATH
שלך, מאחר ש-Chruby עושה זאת עבורך, בהתבסס על גרסת הרובי שבחרת.
Chruby גם קובעת משתני סביבה מסוימים עבור רובי. זה כל מה שצריך כדי ש-Chruby יוכל לעבור בין גרסאות רובי. זה עובד בצורה מצוינת עבור פתרון בעיות עם which
. השתמשתי ב-Chruby במשך מספר שנים ולא התקשרתי לבעיות עמה. Chruby היא בחירה מצוינת, אך אולי תרצה לנסות את Frum, מנהל הגרסאות החדש של רובי.
Frum
פרום נכתב ב-Rust, שפה טובה לביצוע מהיר של תוכנת מערכת בשורת הפקודה. פרום הוא חדש (שוחרר בתחילת 2021). בניגוד ל-Asdf, Chruby או Rbenv, הוא כולל פקודת מתקין Ruby מקודדת ולכן אין צורך בתוכנה נוספת להתקנת Ruby. המתקין מהיר, ופרום אינו זקוק לתלויות (זו נישום רוס כולל שאפשר להתקין עם Homebrew).
לאחר התקנתך של פרום, עליך לשנות את קובץ ~/.zshrc
שלך כך שפרום ירוץ בסביבת הפקודה המקומית שלך. כמו מנהלי הגרסאות האחרים, הוא בודק אם יש קובץ .ruby-version
במדריך של הפרויקט ואם אין גרסה מסוימת מוגדרת לפרויקט, הוא ישמור על גרסת Ruby גלובלית כברירת מחדל. אין שים (בניגוד ל-Asdf או Rbenv) והוא אינו מעביר את הפקודה cd
(בניגוד ל-RVM). למרות שהוא חדש, אני ממליץ עליו כי הוא כולל ומהיר.
התקנת מנהל גרסאות ל-Ruby
I’ve written a complete guide to installing Ruby on Mac. In the guide, I provide instructions for:
אם אתה רוצה לחקור את RVM או Rbenv, ראה:
A Note about Docker
אם תזכירו מנהלי גרסאות של Ruby, סביר להניח שמישהו יגיד, "אני משתמש ב-Docker." Docker הוא כלי מכילה שכמה מפתחים משתמשים בו לניהול גרסאות. המקרה העיקרי לשימוש ב-Docker הוא ליצור מצביע וירטואלי ניתן לשחזור המכיל גרסה מוגדרת של כל תלות תוכנה הנחוצה להפעלת אפליקציה (שפה, מסדי נתונים, �佇ות מסרים). ככזה, הוא אידאלי ליצירת גרסה "קפואה" של סביבת פיתוח לפרויקטים בשרת.
ניתן גם לפתח באופן מקומי בתוך מכל, אך זה ירוץ לאט יותר, ידרוש יותר זיכרון ויוסיף מורכבות תצורה בהשוואה למנהל גרסאות. כדי לשמור על דברים פשוטים, אני נמנע משימוש ב-Docker לפיתוח מקומי אלא אם האפליקציה מורכבת באופן מטריד.
מסקנה
אם אתה לא משתמש ב-Ruby באופן מגע, אם אתה עובד על מספר פרויקטים ב-Ruby. וודא שאתה מתקין מנהל גרסאות מצוין בסביבת הפיתוח המקומית שלך.
I like Asdf because I develop in Ruby and JavaScript and Asdf gives me one version manager for both languages. However, Asdf uses shims (like Rbenv) so occasionally it’s slower than I like. I also find it annoying that Asdf hides the actual command from troubleshooting with the which
command. If these drawbacks outweigh the convenience of managing multiple languages, I recommend using Frum to switch among your Ruby versions. Version managers should be simple and stay out of your way when you’re working.
שאלות שונות לעיתים קרובות (FAQs) על מנהלי גרסאות של Ruby עבור MacOS
מה ההבדלים העיקריים בין RVM ל-rbenv?
RVM (Ruby Version Manager) ו-rbenv הם שני כלים לניהול גרסאות רבות של Ruby במערכת שלך. ההבדל המרכזי מתבטא בגישתם. RVM היא עשירה יותר במאפיינים ומאפשרת לך לנהל gemsets – קבוצה של gems המשמשת ליישום Ruby ספציפי. לעומת זאת, rbenv פשוטה יותר ומתמקדת רק בהחלפת גרסאות Ruby. היא אינה תומכת ב-gemsets אך אפשר להשיג פונקציות דומות באמצעות תוסף הנקרא ruby-build.
איך אני מתקין גרסה ספציפית של Ruby באמצעות RVM?
כדי להתקין גרסה ספציפית של Ruby באמצעות RVM, אפשר להשתמש בפקודה 'rvm install' ואחריה המספר של הגרסה. לדוגמה, כדי להתקין Ruby 2.6.3, היית משתמש בפקודה 'rvm install 2.6.3'. לאחר ההתקנה, אפשר לעבור לגרסה זו באמצעות הפקודה 'rvm use', כמו 'rvm use 2.6.3'.
האם אפשר להשתמש בשני RVM ו-rbenv באותה מערכת?
אמנם זה אפשרי מבחינה טכנית להתקין גם RVM וגם rbenv באותה מערכת, אך זה בדרך כלל אינו מומלץ. שני הכלים משנים את הסביבה השלטית שלך ולא擁有שניהם יכולים להוביל להתנהגות לא צפויה. הכי טוב לבחור באחד על פי הצרכים שלך ולדבוק בו.
איך אני מוחק גרסה של Ruby באמצעות rbenv?
כדי למחוק גרסה של Ruby באמצעות rbenv, אפשר להשתמש בפקודה 'rbenv uninstall' ואחריה המספר של הגרסה. לדוגמה, כדי למחוק Ruby 2.6.3, היית משתמש בפקודה 'rbenv uninstall 2.6.3'.
איך אני קובע גרסת Ruby ברירת מחדל באמצעות RVM?
כדי להגדיר גירסת רובי ברירת מחדל עם RVM, תוכל להשתמש בפקודה 'rvm –default use' ואחריה מספר הגירסה. לדוגמה, כדי להגדיר את רובי 2.6.3 כברירת מחדל, תשתמש בפקודה 'rvm –default use 2.6.3'.
איך אני עובר על rbenv והתוספות שלו?
כדי לעדכן את rbenv והתוספות שלו, תוכל להשתמש ב-git. גלוס לכיוון המדריך של rbenv במסוף שלך (בדרך כלל '~/.rbenv') ולרוץ 'git pull'. לאחר מכן, גלוס לכל תיקיית תוספת ועשה את אותו הדבר.
האם אני יכול להשתמש ב-RVM או rbenv עם שפות תכנות אחרות?
RVM ו-rbenv מיועדים במיוחד לניהול גירסאות של רובי. אם אתה צריך לנהל גירסאות של שפות תכנות אחרות, אולי תרצה לבדוק כלים כמו pyenv עבור פייתון או nvm עבור Node.js.
איך אני רואה את כל הגירסאות של רובי המותקנות עם rbenv?
כדי לראות את כל הגירסאות של רובי המותקנות עם rbenv, תוכל להשתמש בפקודה 'rbenv versions'. זה יציג רשימה של כל גירסאות הרובי שrbenv יכול להשתמש.
איך אני מטפל בתלות ג'ם עם RVM?
RVM מאפשר לך לנהל תלות ג'ם דרך השימוש בג'מסטים. תוכל ליצור ג'מסט עם הפקודה 'rvm gemset create', לעבור לו עם הפקודה 'rvm gemset use', ואז להתקין ג'ם כפי שצריך.
איך אני מתקין גירסה חדשה של רובי עם rbenv?
כדי להתקין גירסה חדשה של רובי עם rbenv, תוכל להשתמש בפקודה 'rbenv install' ואחריה מספר הגירסה. לדוגמה, כדי להתקין את רובי 2.6.3, תשתמש בפקודה 'rbenv install 2.6.3'.
Source:
https://www.sitepoint.com/ruby-version-managers-macos/