جانغو والهجرة الجنوبية مع الصراعات (0007_two … و 0007_one) كيفية حلها؟

StackOverflow https://stackoverflow.com/questions/1447016

  •  22-07-2019
  •  | 
  •  

سؤال

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

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

  • على الكمبيوتر الشخصي الأول: 0007_extend_lizard.py

  • على جهاز الكمبيوتر الثاني: 0007_swap_name_adopter.py

في هذه الحالة أستطيع الركض ./manage migrate --merge أو ./manage migrate 0006 (التراجع) والتشغيل مرة أخرى ./manage migrate.ولكن عندما أريد إضافة حقل جديد فيه models.py و اهرب ./manage startmigration southdemo --auto, ، ثم يحصل الجنوب models = {} بيانات وصفية من عملية الترحيل الأخيرة، كما أنها تحتوي على معلومات مفقودة من عملية الترحيل الأولى.والنتيجة هي إنشاء ترحيل 0008 مع إنشاء تغييرات مرة أخرى (!!!) من أول 0007.

ما هي أفضل طريقة لحل هذه المشكلة؟

حاليا أفكر في خيارين:

  • قم بدمج كل من ترحيل 0007 يدويًا في ملف واحد ثم قم بالترحيل (ولكن يجب على أحدهم تنفيذ "التراجع")

  • التحرك يدويا في عداد المفقودين models = {} Meta إلى آخر هجرة 0007 ثم التالي --auto في 0008 سوف تعمل على أكمل وجه.

ما هو الخيار الأفضل؟أم أن هناك شيء آخر أفتقده؟

هل كانت مفيدة؟

المحلول

بعد القيام migrate --merge أو التراجع والترحيل، إذا كنت تعلم أن أحدث عملية ترحيل تحتوي الآن على نماذج مجمدة غير دقيقة، فسأقوم فقط بإنشاء عملية ترحيل جديدة بدون عملية لأغراض تحديث النماذج المجمدة.فقط اركض ./manage.py startmigration myapp --empty freeze_noop.الآن ستكون نماذجك المجمدة محدثة في المرة التالية التي تريد فيها اكتشاف الترحيل الحقيقي تلقائيًا.

ربما يبدو الأمر قبيحًا بعض الشيء إنشاء ترحيل بدون عملية، ولكن بالنسبة لي يبدو هذا أكثر نظافة من أي من خيارات تحرير السجل اليدوي التي اقترحتها.يمكنك التفكير في ترحيل no-op باعتباره معادلاً لـ "التزام الدمج" في DVCS.

ينبغي ذكر هذه المسألة في هذا القسم من مستندات الجنوب;لقد قدمت قضية لذلك.(تحديث:الآن هو كذلك.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top