لتشغيل إصدار صيغة Homebrew مُثبَّت مختلف كخدمة خلفية في macOS، أوقف خدمة الصيغة الحالية، وشغّل الصيغة ذات الإصدار المحدد باسمها الخاص، ثم تأكد من الخدمة التي تعمل. على سبيل المثال، إذا كان كل من postgresql@16 و postgresql@17 مُثبَّتَين، فاستخدم brew services stop postgresql@16 متبوعًا بـ brew services start postgresql@17. يستخدم مدير خدمات Homebrew نظام launchd في macOS؛ ومن دون sudo، فإنه يسجل الخدمات لتعمل عند تسجيل الدخول الخاص بك. دليل brew(1) في Homebrew

1. العثور على أسماء الصيغ المُثبَّتة

استخدم سجلات Homebrew الخاصة للتحقق مما تم تثبيته وكيفية كتابة أسماء الصيغ:

brew list --versions
brew info postgresql@16
brew info postgresql@17

استبدل الأمثلة بأسماء صيغ الخدمة الخاصة بك. الصيغة ذات الإصدار المحدد (versioned formula) هي صيغة منفصلة في Homebrew، وتُكتب عادةً مع اللاحقة @؛ وليست أمرًا لتحديد إصدار تاريخي اختياري لصيغة ما. تعتمد الصيغ ذات الإصدارات المتاحة على ما توفره Homebrew حاليًا. توضح Homebrew أيضًا أن الصيغ ذات الإصدارات المحددة هي مجموعة محدودة، وقد تتم إزالة بعضها بمرور الوقت. إصدارات صيغ Homebrew

قبل التبديل، افحص مخرجات brew info لكل صيغة لمعرفة تفاصيل خدمتها وأي ملاحظات خاصة بالترحيل (migration). وجود اسم صيغة جديد لا يضمن أن الخدمة يمكنها إعادة استخدام دليل البيانات أو الإعدادات الخاصة بالإصدار القديم. قد تتطلب برامج قواعد البيانات والخوادم متطلبات ترقية أو تخفيض إصدار خاصة بالتطبيق؛ اتبع عملية الترحيل الموثقة لتلك البرامج قبل تشغيل الإصدار الآخر باستخدام البيانات الحالية.

2. إيقاف خدمة إحدى الصيغ وتشغيل الأخرى

شغّل أوامر الخدمة من دون sudo لأي خدمة تبدأ عند تسجيل الدخول الخاص بك:

brew services stop postgresql@16
brew services start postgresql@17
brew services list

استخدم معرّفات الصيغ الفعلية المُثبَّتة بدلًا من أمثلة PostgreSQL. يأخذ الأمران brew services stop و start اسم الصيغة، وبذلك يتم تحديد الخدمة المرتبطة بالصيغة المستهدفة. يتيح لك الأمر list فحص حالة الخدمة التي تعرضها Homebrew بعد ذلك. يوثق الدليل إدارة الخدمات من خلال launchd ويشير إلى أن الإعداد من دون sudo يستخدم ~/Library/LaunchAgents، لذا فهو مقتصر على نطاق تسجيل دخول المستخدم الحالي. دليل brew(1) في Homebrew

إذا كان الإصدار المستهدف مُثبَّتًا ولكن خدمته لا تعمل، فشغّله مباشرة. إذا كنت ترغب في إعادة التشغيل لنفس الصيغة، فإن الأمر brew services restart FORMULA موثق لذلك؛ وعند تغيير الإصدارات، فإن الإيقاف الصريح للصيغة القديمة وتشغيل الصيغة الجديدة يجعل عملية الانتقال المقصودة واضحة. لا تستخدم brew services restart --all لتبديل خدمة واحدة لأن ذلك يؤثر على جميع خدمات Homebrew.

3. فهم الفرق بين تحديد الخدمة وتحديد الأوامر

إن تشغيل صيغة ذات إصدار محدد كخدمة لا يجعل بالضرورة أدوات سطر الأوامر الخاصة بها هي الافتراضية في Terminal. تقوم Homebrew بتثبيت كل صيغة داخل مجلد خاص بإصدارها يُعرف بـ Cellar keg. يؤدي ربط الصيغة (linking) إلى إنشاء روابط رمزية (symlinks) في المسار المشترك لـ Homebrew، في حين يتم تصنيف بعض الصيغ ذات الإصدارات على أنها keg-only ولا يتم ربطها هناك افتراضيًا. دليل brew(1) في Homebrew، الأسئلة الشائعة في Homebrew: ماذا تعني "keg-only"؟

تحقق من brew info FORMULA لمعرفة ما إذا كانت الصيغة من نوع keg-only وللحصول على أي إرشادات متعلقة بمتغير PATH. إذا كنت تحتاج فقط إلى تشغيل الخدمة الخلفية باستخدام الإصدار الآخر، فأدر خدمتها باستخدام اسم الصيغة؛ ولا تفترض أن تغيير الروابط مطلوب. تجنب استخدام brew link --force كخطوة عامة للتبديل: تحذر Homebrew من أن فرض ربط صيغة keg-only في الأدلة المشتركة قد يؤدي إلى تعارضات. إرشادات الاعتماديات من نوع keg-only في Homebrew

4. في حال فشل بدء تشغيل الخدمة المستهدفة

تحقق أولًا من مخرجات brew services list ومخرجات brew info للصيغة المستهدفة. تأكد من توقف الخدمة القديمة ومن أن الصيغة الجديدة توفر بالفعل تعريفًا للخدمة؛ حيث يعتمد دعم خدمات Homebrew على احتواء الصيغة على إعدادات الخدمة. كتاب وصفات صيغ Homebrew (Formula Cookbook)

بعد ذلك، تحقق من سجلات التطبيق وإعداداته الخاصة. يمكن أن تفشل الخدمة حتى لو كانت الصيغة مُثبَّتة—على سبيل المثال، بسبب توجيه إعداداتها إلى دليل بيانات مختلف، أو لأن المنفذ قيد الاستخدام بالفعل، أو لأن إصدارًا ما لا يمكنه فتح البيانات الحالية. هذه احتمالات على مستوى التطبيق، وليست إصلاحات تضمنها Homebrew؛ ارجع إلى الوثائق الرسمية للتطبيق قبل تغيير البيانات أو حذفها.

لا تستخدم sudo brew services إلا إذا كنت بحاجة عن قصد إلى خدمة على مستوى النظام بالكامل تبدأ عند إقلاع الجهاز. توضح وثائق Homebrew أن هذا الوضع يعمل في /Library/LaunchDaemons، بينما يتم تشغيل خدمة المستخدم الافتراضية عند تسجيل الدخول. يجب إدارة معظم خدمات التطوير الشخصية تحت حساب المستخدم الذي يملك ملفاتها. دليل brew(1) في Homebrew

لذلك، يشتمل التبديل الناجح على خطوتي تحقق: أن تعرض Homebrew الصيغة المطلوبة قيد التشغيل، وأن يستجيب التطبيق نفسه كما هو متوقع. حالة الخدمة وحدها لا تؤكد توافق البيانات أو تثبت أن عملاء سطر الأوامر يشيرون الآن إلى إصدار تلك الصيغة.

المصادر