مقارنة بين مديري إصدارات Ruby لنظام التشغيل macOS

في هذا المقال، سأقارن أكثر أدوات إدارة الإصدارات شهرة للـ Ruby على جهاز Mac: 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 هو مدير الإصدارات الذي يتوافق مع العديد من اللغات. إذا كنت تستخدم Ruby لتطوير تطبيقات الويب باستخدام Rails 6، ستحتاج إلى تثبيت Node وYarn لبناء تطبيق بداية Rails. (قد يتم التخلص من احتياج Node في Rails 7، لكن هذا ليس مؤكدًا بعد.)

لذا، بالنسبة لمطور Rails، فإن Asdf هو مدير الإصدارات المثالي. سيخدمك أيضًا إذا كنت تطور تطبيقات باستخدام Python، Elixir، أو العديد من اللغات الأخرى (انظر قائمة اللغات المدعومة). هل هناك سلبية في استخدام Asdf؟ اثنتان فقط. يستخدم شيمز لحجب الأوامر الشائعة، مما يجعل التصحيح صعبًا. أيضًا، قد يكون بطيئًا قليلاً لبعض العمليات. إذا كنت تطور في لغات متعددة، فإنني أوصي بمحاولة Asdf لمعرفة ما إذا كنت تحبه. انتقل إلى Frum، مدير الإصدارات المخصص لـ Ruby ومكتوب بلغة Rust، إذا وجدت أن Asdf يبطئ سرعتك.

مديرات الإصدارات المخصصة لـ Ruby

إذا كنت تنوي تطوير التطبيقات فقط باستخدام Ruby، اختر من بين أربعة مدراء الإصدارات المخصصة لـ Ruby: Chruby، Frum، Rbenv، وRVM. الاختلاف بين الأربعة يكمن في السرعة، التعقيد، وكيفية التبديل بين إصدارات Ruby. دعونا نلقي نظرة على أقدمها أولاً: RVM.

RVM

RVM كان أول مدير إصدار شهير للـ Ruby. ما يزال محتفظ به ومستخدم على نطاق واسع. RVM يعدل الأمر cd الخاص بالنظام لتعيين متغيرات البيئة عند تغيير الدلائل. لتجاوز الأمر cd، يقوم نص التثبيت لـ RVM بتغيير ملف تكوين الطابقة البريدية (ملف ~/.zshrc في أجهزة Mac الأحدث).

RVM يعرض بشكل صحيح متغيرات البيئة لكشف إصدار Ruby وموقع الأدوات النقطية، وهو ما يمكن أن يساعد في تشخيص المشاكل. ومع ذلك، يشمل RVM ميزات إضافية مثل المجموعات النقطية. المجموعات النقطية لم تعد ضرورية، حيث تم إضافة Bundler إلى الـ Ruby الأساسي لإدارة التبعيات النقطية. التعقيد الإضافي ليس ضروريًا، لذا عبرت العديد من المطورين إلى مدير إصدار أحدث مثل Rbenv، Chruby، أو Frum.

Rbenv

بالإضافة إلى RVM، Rbenv كان مدير الإصدار الأكثر شهرة للـ Ruby منذ فترة طويلة. Rbenv يستخدم الأقفال لحجب الأوامر الشائعة لـ Ruby. (كما يستخدم asdf الأقفال أيضًا.)

بعد تثبيت Rbenv باستخدام Homebrew، يجب تعديل ملف ~/.zshrc الخاص بك حتى تتولى أقفال Rbenv الأولوية على الأوامر العادية لـ Ruby. يتم استدعاء الأقفال من خلال الأمر rbenv exec، الذي يحدد إصدار Ruby الذي يجب استخدامه قبل تشغيل أي أمر Ruby.

الأشيم لها نقصين. أولاً، يجعل الأشيم تصعب التحقيق في المشاكل عن طريق إخفاء الأمر الفعلي. على سبيل المثال، يظهر الأمر which ruby شيم Rbenv وليس الإصدار الفعلي لـ Ruby (يجب تعيين متغير البيئة RBENV_DEBUG إذا كنت ترغب في رؤية الأمر الفعلي لـ Ruby). ثانياً، يمكن للشيم إضافة زمن قدره ميكروثونات إلى تنفيذ الأمر Ruby. (يتدخل Rbenv في كل مرة قمت بتشغيل أمر Ruby على عكس RVM، الذي يتدخل فقط عند تغيير الدلائل.) بالنسبة للمطورين الذين يلاحظون التأخير، أو لا يحبون فكرة الأشيم، هناك Chruby أو Frum.

Chruby

Chruby ليست معروفة بقدر RVM أو Rbenv، ولكنها تُحمل بواسطة عدد من المطورين الروبي البارزين. على عكس RVM، فإنها لا تسحب الأمر cd. على عكس Rbenv أو Asdf، فإنها لا تعترض الأوامر باستخدام الأشيم. ستحتاج إلى تعديل ملف ~/.zshrc لتشغيل Chruby في بيئة الطابق المحلي الخاص بك. لا داعي لتعديل $PATH الخاص بك، حيث يقوم Chruby بذلك نيابة عنك، بناءً على الإصدار الذي اخترته من Ruby.

Chruby أيضًا يعين بعض متغيرات البيئة لـ Ruby. هذا كل ما يلزم لتبديل Chruby بين إصدارات Ruby. يعمل بشكل جيد في التحقيق في المشاكل باستخدام which. استخدمت Chruby لعدة سنوات ولم أواجه مشاكل معها. Chruby هي خيار رائع، ولكن قد ترغب في تجربة Frum، أحدث مدير إصدار Ruby.

Frum

فروم مكتوب بلغة رست، وهي لغة جيدة لتنفيذ البرامج النظامية عبر الأوامر السطرية بسرعة. فروم جديد (صدر في أوائل عام 2021). على عكس أسدف، تشروبي أو ربفن، فإنه يشمل أمر تثبيت روبي المدمج لذا لا يلزم برنامج إضافي لتثبيت روبي. إن جهاز التثبيت سريع، ولا يتطلب فروم وجود تبعيات (إنها تنفيذية رست كاملة يمكنك تثبيتها باستخدام هومبريو).

بعد تثبيت فروم، يجب تعديل ملف ~/.zshrc الخاص بك حتى يعمل فروم في بيئة الصندوق المحلية الخاصة بك. مثل إدارات الإصدارات الأخرى، فإنه يبحث عن ملف .ruby-version في دليل مشروع وإذا لم يتم تحديد إصدار للمشروع، فإنه سيقوم بالتوجيه إلى إصدار روبي عالمي. لا توجد أشباه (على عكس أسدف أو ربفن) ولا يتغير الأمر cd (على عكس RVM). على الرغم من أنه جديد، أوصي به لأنه كل شيء موجود في مكان واحد وسريع.

تثبيت إدارة الإصدار للروبي

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، فأنت لست مستخدمًا روبي عاديًا فقط. تأكد من تثبيت إدارة إصدار رائعة في بيئة التطوير المحلية الخاصة بك.

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 أكثر ثراءً من الميزات ويسمح لك بإدارة مجمعات الأحجار – مجموعة من الأحجار التي تستخدم لتطبيق Ruby محدد. من ناحية أخرى، rbenv أبسط ويركز فقط على تبديل إصدارات Ruby. لا يدعم مجمعات الأحجار ولكن يمكنك تحقيق وظيفة مماثلة باستخدام المكون الإضافي المسمى 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؟

لتعيين إصدار Ruby الافتراضي باستخدام RVM، يمكنك استخدام الأمر ‘rvm –default use’ متبوعًا برقم الإصدار. على سبيل المثال، لتعيين Ruby 2.6.3 كافتراضي، ستستخدم الأمر ‘rvm –default use 2.6.3’.

كيف أقوم بتحديث rbenv وملحقاته؟

لتحديث rbenv وملحقاته، يمكنك استخدام git. انتقل إلى مجلد rbenv في المحطة الأولى (عادة ‘~/.rbenv’) وقم بتشغيل ‘git pull’. ثم، انتقل إلى مجلد كل ملحق وقم بنفس العملية.

هل يمكنني استخدام RVM أو rbenv مع لغات البرمجة الأخرى؟

تم تصميم RVM وrbenv خصيصًا لإدارة إصدارات Ruby. إذا كنت بحاجة إلى إدارة إصدارات لغات البرمجة الأخرى، فقد ترغب في البحث في أدوات مثل pyenv لـ Python أو nvm لـ Node.js.

كيف أقوم بعرض جميع إصدارات Ruby المثبتة مع rbenv؟

لعرض جميع إصدارات Ruby المثبتة مع rbenv، يمكنك استخدام الأمر ‘rbenv versions’. سيعرض هذا قائمة بجميع إصدارات Ruby التي يمكن لـ rbenv استخدامها.

كيف أتعامل مع وحدات التفاف المتعلقة بالألغام مع RVM؟

يسمح لك RVM بإدارة وحدات التفاف المتعلقة بالألغام من خلال استخدام gemsets. يمكنك إنشاء gemset باستخدام الأمر ‘rvm gemset create’، والتبديل إليه باستخدام الأمر ‘rvm gemset use’، ثم تثبيت الألغام كما هو مطلوب.

كيف أقوم بتثبيت إصدار Ruby جديد مع rbenv؟

لتثبيت إصدار Ruby جديد مع rbenv، يمكنك استخدام الأمر ‘rbenv install’ متبوعًا برقم الإصدار. على سبيل المثال، لتثبيت Ruby 2.6.3، ستستخدم الأمر ‘rbenv install 2.6.3’.

Source:
https://www.sitepoint.com/ruby-version-managers-macos/