העברת פורום SMF2 ל-Discourse

עדכון כאן - בסופו של דבר הצלחתי לגרום לזה לעבוד. כמה מהלקחים שנלמדו עשויים לעזור לאחרים, ומכאן התיאור המפורט להלן. כדאי להוסיף את בעיית הרשאות Unix ל-OP.

הרשאות Unix בתיקיית הקבצים המצורפים

היבואן של SMF2 עבד כשורה, אך הייתה בעיה קלה הקשורה להרשאות Unix של הקבצים המצורפים. בעת הפעלת סקריפט היבוא, הוא מופעל תחת המשתמש discourse, שאינו בהכרח בעל הרשאות קריאה וכתיבה לנפח האחסון של הקבצים המצורפים.

במהלך היבוא, נראה שהיבואן יוצר קבצים זמניים קטנים באותה תיקייה, לכן עליך לוודא שלמשתמש הנכון יש הרשאות קריאה וכתיבה. עשיתי זאת על ידי שינוי הבעלות (chown) על התיקייה במארח באופן רקורסיבי למשתמש discourse, אך ישנן דרכים אחרות, כולל הגדרת הרשאות פתוחות מאוד, או שימוש ב-Access Control Lists.

קשה לבצע דיבאגינג להעלאות שנכשלו

אם היבואן של SMF2 נכשל בהעלאה מכל סיבה, הוא מדווח על כישלון באותה צורה, כך שקשה לדעת מדוע קובץ מצורף/העלאה נכשלה.

סיבות אפשריות כוללות:

  • קבצים מצורפים נמצאים במקום הלא נכון במערכת הקבצים.
  • ההרשאות על הקבצים המצורפים אינן מספיקות (דורש rw).
  • נפח האחסון של Docker אינו מוגדר כראוי.
  • מסד הנתונים של SMF2 מדווח שצריך להיות קובץ מצורף שכבר אינו קיים בתיקיית הקבצים המצורפים שלך (בפורום SMF2 שלנו, שגילו כ-20 שנה, היו לא מעט קבצים מצורפים ‘אבודים’ - אין הרבה מה לעשות לגבי אלה…)
  • אובייקט ההעלאה אינו נשמר כראוי במסד הנתונים של Discourse או על הדיסק ב-/shared/standalone/uploads
  • קוד ה-Markdown עבור קישור ההעלאה אינו נוצר.

ביצעתי דיבאגינג על ידי בדיקת כל שלב בתהליך הקובץ המצורף מקצה לקצה והוספת מספר רב של הצהרות puts לדיבאגינג נוספות בקוד smf2.rb, כדי להבין איזו חלק בתהליך יצירת ההעלאה לא עבד. במקרה שלי היו מספר בעיות קטנות שבסופו של דבר נפתרו אחת אחת.

אל תהיה עצלן מרקוס

ובסוף התהליך נהייתי עצלן ולא ניקיתי את מסד הנתונים לאפס באופן מלא, אז הייתה לי את הבעיה שכל הדברים הצליחו - אך היבואן אינו דורס נושא (Topic) או פוסט (Post) שכבר יובאו. לכן קוד ה-Markdown המתייחס להעלאה, שאמור להיראות כך:

---

![file-name.jpg|357x268](upload://oK9TCvNVoojGyr357Amh19Cz.jpeg)

לא הוכנס לפוסטים.

בדיקה שזה עובד

הדרך שמצאתי לבדוק שכל זה עובד מקצה לקצה היא להריץ

Post.where("raw LIKE ?", "%upload://%").count

במסוף ה-Rails. זה יחזיר את ספירת הפוסטים שיש להם קישור העלאה תקין בהם, והמספר הזה עולה בהדרגה לאורך תהליך היבוא.

2 לייקים