OOZOU
تواصلوا معنا
العودة إلى المدونة

بناء Ruby وJRuby على CircleCi بالتوازي

اضبطوا CircleCI لبناء تطبيقكم على Ruby وJRuby بالتوازي.

25 نوفمبر 2016
دقيقتان للقراءة
بناء Ruby وJRuby على CircleCi بالتوازي

احتجت مؤخرًا إلى تحويل تطبيق Rails ليس بالبسيط من MRI إلى JRuby لأحد عملائنا. سارت العملية بسلاسة إلى حد كبير، لكن متطلبات الأعمال تتغير، وقد يحتاج العميل إلى تشغيل التطبيق على MRI أو JRuby.

وللتأكد من أن تغييرات الكود لن تكسر البناء على أيٍّ من المنصتين، ضبطت CircleCI لبناء النسختين في الوقت نفسه. وقررت ضبط التوازي يدويًا، بحيث تُبنى كل منصة في container مختلف في الوقت نفسه (MRI في container 0، وJRuby في container 1).

إعداد البيئة

يبدأ الإعداد بإضافة بعض متغيرات البيئة لتحديد إصدارات Ruby المختلفة. وأضفت أيضًا متغيرًا مجمّعًا باسم RUBY_VERSIONS، يُستخدم لتشغيل أوامر RVM على المنصتين عبر rvm do. كما أضفت بعض خيارات الضبط الخاصة بـ Java لضمان أن تعمل عمليات بناء JRuby بسرعة معقولة دون أن تستهلك ذاكرة كبيرة.

machine:
  environment:
    MRI_VERSION: 2.3.3
    JRUBY_VERSION: jruby-9.1.6.0
    RUBY_VERSIONS: $MRI_VERSION,$JRUBY_VERSION
    JRUBY_OPTS: '--debug -J-XX:+TieredCompilation -J-XX:TieredStopAtLevel=1 -J-Xms512m -J-Xmx1024m'
    # other environment variables
lang-yaml

تثبيت التبعيات

هذا تجاوز (override) بسيط لطريقة CircleCI المعتادة في تثبيت التبعيات: نحدّث RVM للحصول على أحدث إصدارات Ruby، ونثبّت الإصدارات المحددة في RUBY_VERSIONS، ثم نستخدم rvm do لتثبيت Bundler والـ gems المحددة في Gemfile (وباستخدام platforms يسهل إلى حد ما بناء Gemfile يعمل مع إصداري Ruby كليهما).

dependencies:
  override:
    - rvm get head
    - rvm install $RUBY_VERSIONS
    - rvm $RUBY_VERSIONS do gem install bundler
    - rvm $RUBY_VERSIONS do bundle install
lang-yaml

إعداد الاختبارات

هذه حيلة ذكية تعلّمتها من توثيق CircleCI. يمكنكم استخدام عبارة case من الـ shell داخل ملف الإعداد لتشغيل أوامر مختلفة في containers مختلفة. ومع rvm use أتاح لي ذلك "تثبيت" MRI على container 0 وJRuby على container 1، فنعرف فورًا أي إصدار تسبّب في فشل البناء.

test:
  override:
    - case $CIRCLE_NODE_INDEX in 0) rvm use $MRI_VERSION && bundle exec rspec ;; 1) rvm use $JRUBY_VERSION && bundle exec rspec ;; esac:
        parallel: true
lang-yaml

الخلاصة

رغم أن CircleCI بصيغته الحالية لا يدعم شيئًا مثل build matrix في Travis، فإنه مرن بما يكفي لإيجاد حلول بديلة. وآمل أن يبسّط الإصدار 2.0 هذه العملية، لكن الحل الحالي سهل بما يكفي ويؤدي الغرض جيدًا بالنسبة إلينا.

Related Articles

كيف أصمّم برمجيات؟ دليل المبتدئين لأصحاب الأعمال

كيف أصمّم برمجيات؟ دليل المبتدئين لأصحاب الأعمال

تصميم البرمجيات عملية ممتعة لكنها معقدة، تتطلب الإبداع والتفكير المنطقي ومهارات حل المشكلات.

اقرأوا المزيد
مستقبل الحوسبة الطرفية: ما تحتاج الشركات إلى معرفته

مستقبل الحوسبة الطرفية: ما تحتاج الشركات إلى معرفته

يتطور المشهد الرقمي بسرعة، وعلى الشركات أن تتكيّف لتواكب الطلب المتزايد على السرعة والكفاءة والمعالجة في الوقت الفعلي.

اقرأوا المزيد
مستقبل قطاع التجزئة: الذكاء الاصطناعي والواقع المعزّز واتجاهات التحوّل الرقمي

مستقبل قطاع التجزئة: الذكاء الاصطناعي والواقع المعزّز واتجاهات التحوّل الرقمي

يتطور قطاع التجزئة بوتيرة غير مسبوقة بفضل الذكاء الاصطناعي (AI) والواقع المعزّز (AR) وتقنيات التحوّل الرقمي. فلم تعد المتاجر التقليدية مجرد أماكن لبيع المنتجات، بل أصبحت متاجر ذكية وتفاعلية.

اقرأوا المزيد

Have a Project in Mind?

Let's discuss how we can help bring your ideas to life with our expertise in web and mobile development.

ابدأوا المحادثةhello@oozou.com
OOZOU Logo

بانكوك · سنغافورة · هونغ كونغ

X
Facebook
Instagram
LinkedIn
OOZOU Co., Ltd.
548 One City Centre
Ploenchit Road
Bangkok 10330
Thailand
+66 2544 0000
hello@oozou.com

الخدمات

  • تطوير الويب
  • وكلاء الذكاء الاصطناعي والذكاء الاصطناعي التوليدي
  • تطوير تطبيقات الجوال
  • تحليلات البيانات وهندستها
  • تصميم تجربة المستخدم وواجهته (UX/UI) وتصميم المنتجات
  • التحوّل الرقمي

الشركة

  • من نحن
  • الوظائف
  • المدونة
  • دراسات الحالة
  • عروض حية
  • تعلّمت اليوم
  • تواصل معنا

المزيد

  • القطاعات
  • شبكة الشركاء
© 2026 OOZOU. جميع الحقوق محفوظة.
سياسة الخصوصيةمدونة قواعد السلوكسياسة مكافحة الرشوة والفساد