الترقية دون إعادة بناء بوجود صورة جيدة/جاهزة؟

مرحباً يا شباب.

هل من الممكن التحديث إلى إصدار أحدث دون إعادة بناء الشيء بأكمله؟

أفكر في سيناريو يكون فيه تطبيقان من Discourse متطابقين تقريبًا، وبمجرد أن يكون لدي صورة جديدة جاهزة - لأي منهما - يمكنني استخدامها لنشر تطبيق Discourse الثاني، مع وجود جميع الإعدادات/المعلمات للحاوية.

أعتقد أن الشيء الوحيد المتبقي للعناية به لمثل هذه الحاوية هو ترحيل قاعدة بيانات PostgreSQL؟

هل هذا منطقي وإذا كان ممكنًا، فكيف يمكن القيام بذلك، ويفضل أن يكون ذلك دون تعديل أي شفرة مصدرية؟

شكراً جزيلاً، ل.

يمكنك بناء صورة، ودفعها إلى مستودع، ثم تشغيلها باستخدام ./launcher start-cmd app للحصول على أمر docker لتشغيل الحاوية (ولكنك ستبدل مستودع الحاوية الخاص بك بالمستودع المحلي).

ومع ذلك، تحتاج بعد ذلك إلى ترحيل قاعدة البيانات، وتجميع الأصول مسبقًا، وما إلى ذلك.

إذا كان وقت التوقف هو ما تريد تجنبه، فإن إعداد الحاوية المزدوجة يسمح لك ببناء حاوية جديدة بينما تستمر الحاوية القديمة في العمل، ثم تتولى عمليات الترحيل وما شابه ذلك.

إذا كنت تريد توخي الحذر الشديد، يمكنك تعيين SKIP_POST_DEPLOYMENT_MIGRATIONS في ملف app.yml الخاص بك، ثم تنفيذ rake db:ensure_post_migrations db:migrate بعد بدء تشغيل الحاوية الجديدة. عدم القيام بذلك قد يؤدي إلى ترحيل قاعدة البيانات بحيث لا تتمكن الحاوية القديمة من استخدامها بعد الآن. إنها ليست مشكلة في كثير من الأحيان، وبعد ذلك، ليست لفترة طويلة جدًا.

لا تمثل فترة التوقف مشكلة بالنسبة لي.

تطبيقان أفكر فيهما سيكونان متطابقين تقريبًا - ولكن ليس متطابقين تمامًا.

سيكون التطبيقان موقعين مختلفين، مما يعني قواعد بيانات وأحجام ومنافذ وأسماء مختلفة… ولكن سيكون لديهما نفس الخطاب الأساسي - إن جاز التعبير - (ونفس الإضافات، ونفس أي شيء قد يكون حاسمًا لهذا النواة/الأساس).

في عالم Discourse المثالي - إذا لم يكن موجودًا بعد - لمثل هذا السيناريو، يمكن استخدام هذه الصورة الجديدة بمجرد بنائها أول مرة/مرة واحدة حتى مع أدوات docker مباشرة - وقاعدة البيانات أو أي شيء يحتاج إلى “ترحيله” إلى هذه الصورة/إصدار Discourse الجديد، يمكن لعملية بدء/تشغيل هذا الحاوية “الثانوية” - ربما بمساعدة متغيرات البيئة - أن تقرر التحقق من عمليات ترحيل قواعد البيانات أو تنفيذها.

الميزة الرئيسية - التي يجب أن يكون الكثيرون قد فكروا فيها بالفعل - هي صورة واحدة لكلتا الحاويتين/التطبيقات (أو المزيد إذا قام بعض الأشخاص بذلك).

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