המטרה
Hiren ירש אפליקציית e-commerce לפירות יבשים ב-Django שעברה כמה מפתחים: פער בין הסביבה המקומית לפרודקשן, django-notifications-hq מותאם שמותקן כ-editable, התראות שבורות ב-macOS, ו-pinning בקובץ התלויות שמטעה את מי שקורא אותו. המטרה הייתה לולאת פיתוח מקומית שרצה, תיעוד של מלכודות הפרודקשן, ותיקונים מוכנים למסירה.
הפתרון
ייצוב של קוד שעבר בירושה, יחד עם תיעוד. החלפתי את requirements.txt להתקנה editable מ-git של django-notifications-hq המותאם, עם fallback לנתיב ב-macOS; כתבתי קובץ !!dev_NOTES!!.txt רועש שמפרט את ההבדלים בין מקומי לפרודקשן; שמרתי את requirements_old.txt לרפרנס; ושלחתי fixture בשם backup.json שנותן baseline עובד למסד הנתונים.
עיקרי הדברים
- Django app prod-critical שעבר בירושה יוצב למפתח הבא
- אסטרטגיית editable install מחליפה את pinning שאינו תואם
- !!dev_NOTES!!.txt + backup.json = onboarding מהיר
האתגר
קובץ requirements.txt נעל את django-notifications-hq בגרסה 1.8.0, אבל בפרודקשן רצה התקנת editable עם שינויים מקומיים שלא קיימים בגרסה הרשמית.
החלפתי להתקנה בצורת `-e /absolute/path/to/django-notifications-hq`, עם הנתיבים של פרודקשן ושל macOS כהערות בקובץ עצמו. את מצב ה-pinning הקודם שמרתי ב-requirements_old.txt כדי שאפשר יהיה לחזור אליו או פשוט להבין מה היה.
ה-signals של מנגנון ההתראות עבדו בפרודקשן על Ubuntu אבל קרסו בסביבת הפיתוח על macOS.
תיעדתי workaround בן שלושה שלבים לכיבוי המנגנון - settings.py, urls.py ותבניות - וסימנתי אותו במפורש כ-'OUTDATED fallback' בתוך !!dev_NOTES!!.txt, כך שלמפתח הבא יש דרך להמשיך לעבוד גם אם ההתקנה ה-editable נכשלת אצלו.
חלק מהשינויים שקיימים בפרודקשן נמצאים ב-gitignore. פריסה עיוורת מהרפו הייתה דורסת את השרת החי.
אזהרה רועשת בראש !!dev_NOTES!!.txt, מנוסחת כדי לתפוס את המפתח הבא לפני שהוא שובר את הפרודקשן - ולא אחרי.
התקנה מקומית מאפס עם מסד נתונים ריק פירושה שאין שום דבר שאפשר להדגים או לבדוק מולו.
הקובץ backup.json הוא snapshot מלא של dumpdata ב-Django. פקודת loaddata אחת משחזרת ממנו מצב עבודה מלא, וזה מקצר את ה-onboarding מיום לרבע שעה.
מה נמסר
- requirements.txt עם התקנת editable של django-notifications-hq
- requirements_old.txt כרפרנס למצב ה-pinning הקודם
- backup.json - fixture של Django ל-baseline עובד של מסד הנתונים
- !!dev_NOTES!!.txt שמתעד את המלכודות שבין מקומי לפרודקשן
- data/shipping_rates.json - חוקי משלוח שהוצאו החוצה מהקוד
- סביבת פיתוח מקומית מיוצבת שרצה מקצה לקצה
תוצאות
Maintenance + fixes
טווח
notes + reqs + fixture
תוצרי העברה
מה זה לימד אותי
- פרויקטים שעוברים בירושה ראויים לקובץ !!dev_NOTES!! כן ואגרסיבי בראש הרפו, לפני כל דבר אחר
- שמירת requirements_old.txt לצד requirements.txt היא ביטוח זול בכל מעבר אסטרטגיית תלויות
- fixture מלא בצורת backup.json מנצח כל seed script כשצריך להכניס מפתח זר לקוד Django ישן
