עדכון נכשל, גרסת Docker לא נתמכת

אובונטו 16
לחצתי על שדרוג האינטרנט כמו שעשינו פעמים רבות. נכשלה ועכשיו האפליקציה לא תבנה מחדש את גרסת הדוקר שאינה נתמכת.

יש רעיונות? אולי אנסה לשדרג את מערכת ההפעלה וכדומה, אבל זה הרבה זמן שלא היה לי היום.

כל דרך לחזור אחורה?

ניסיתי להגדיר את הגרסה ל-האש שהיה ישן, אבל מיד אני מקבל את גרסת הדוקר שאינה נתמכת כשאני מנסה לשחזר

אתה לא יכול לשדרג.

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

Oh. Sorry. I didn’t read carefully enough.

No. You can’t go back.

You might be able to upgrade docker if you use docker’s install.

התקנתי מחדש את מערכת ההפעלה וכן התקדם עם שדרוג PostgreSQL 15, אך עכשיו כשאני מבצע בנייה מחדש של היישום, אני מקבל

2025-05-18 14:58:28.208 UTC [1455] discourse@discourse שגיאה: עמודה "require_message" לא קיימת בשורה 72
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse הצהרת SQL: SELECT id, name, name_key, description, notify_type, auto_action_type, require_message, applies_to, position, enabled, score_type FROM "flags" ORDER BY "flags"."position" ASC
** כשל בתוסף **

לא ניתן להתחיל את דיסקורז עקב שגיאה זו באתחול התוסף:

PG::UndefinedColumn: שגיאה: עמודה "require_message" לא קיימת
שורה 1: ..._key, description, notify_type, auto_action_type, require_me...
                                                             ^

לאחר שרציתי לבנות מחדש (לאחר שדרוג PostgreSQL)

ביצוע עדכון
------------------
ניתוח כל השורות בקלסטר החדש                      בסדר
קיפאון של כל השורות בקלסטר החדש                      בסדר
מחיקת קבצים מ-pg_xact החדש                            בסדר
העתקת pg_xact הישן לשרת החדש                            בסדר
הגדרת ה-XID העתיק לקלסטר החדש                           בסדר
קביעת מזהי טרנזקציה ואפוך הבאים לקלסטר החדש            בסדר
מחיקת קבצים מ-pg_multixact/offsets החדש                בסדר
העתקת pg_multixact/offsets הישן לשרת החדש                 בסדר
מחיקת קבצים מ-pg_multixact/members החדש                  בסדר
העתקת pg_multixact/members הישן לשרת החדש                בסדר
הגדרת ה-multixact הבא ומיקום ה-offset לקלסטר החדש       בסדר
אפס שרשרת WAL                                                בסדר
הגדרת frozenxid ו-minmxid בטרנזקציה בקלסטר החדש            בסדר
שחזור אובייקטים גלובליים בקלסטר החדש                     בסדר
שחזור תרשימים של מסד הנתונים בקלסטר החדש                בסדר
העתקת קבצי יחס משתמשים                                     בסדר
הגדרת ה-OID הבא לקלסטר החדש                                בסדר
סינכרון נתונים לדיסק                                          בסדר
יצירת סקריפט למחיקת הקלסטר הישן                         בסדר
בדיקת עדכוני הרחבות                                       התראה

ההתקנה שלך מכילה הרחבות שיש לעדכן באמצעות פקודת ALTER EXTENSION. הקובץ
    update_extensions.sql
כאשר תפעיל ב-pgSQL, עדכונים אלה יבוצעו.


השלמת שדרוג
----------------
סטטיסטיקות האופטימיזציה לא מועברות על ידי pg_upgrade.
לאחר שתפעיל את השרת החדש, מומלץ להריץ:
    /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages

הרצת סקריפט זה תמחוק את קבצי הנתונים של הקלסטר הישן:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
שדרוג PostgreSQL הושלם

המסד הישן 13 נשמר ב- /shared/postgres_data_old

להשלמת השדרוג, בצע בנייה מחדש באמצעות:

./launcher rebuild app

יש דבר שאני יכול לעשות? אני לא בטוח איך זה נעדר עמודה.

Yeah. There are some topics about similar problems. A migration for reverted, I think, so you’re left in a limbo state.

Maybe add the column by hand.

אני לא בטוח איך לעשות את זה, יותר ספציפית לאיזה טבלה וכדומה. האם יש מידע בנושא הזה שאוכל למצוא? מצאתי את הפוסט שהזכרת, אך לא היו בו פרטים ספציפיים.

תודה רבה!

אני אפילו לא מצליח להעלות את מסד הנתונים מספיק כדי להוסיף את העמודה. אני אנסה לבטל את כל התוספים ולראות אם אוכל להפעיל לפחות את הקונטיינר.

Ok here’s how we got it fixed (It is not for the faint of heart)

  1. Upgrade Ubuntu to a version that supports Docker 20+
    We were in Ubuntu 16 I had to get to at least Ubuntu 20 so we did this upgrade twice
RELEASE_UPGRADER_ALLOW_THIRD_PARTY=1 do-release-upgrade
  1. Once we got to Ubuntu 20 we had to Update Docker which Ubuntu refused to do on its own.
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
  1. That got us to docker 28
  2. Then run
./launcher rebuild app

5.This will upgrade your postgress from 13 to 15 see:

6. Once the Db upgraded successfully ran

./launcher rebuild app
  1. This yielded an error about missing column
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse ERROR:  column "require_message" does not exist at character 72
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse STATEMENT:  SELECT id, name, name_key, description, notify_type, auto_action_type, require_message, applies_to, position, enabled, score_type FROM "flags" ORDER BY "flags"."position" ASC
** PLUGIN FAILURE **

You are unable to start Discourse due to this error during plugin
initialization:

PG::UndefinedColumn: ERROR:  column "require_message" does not exist
LINE 1: ..._key, description, notify_type, auto_action_type, require_me...
                                                             ^
  1. At this point there is no way to get the container started, so I went to app.yml and disabled all plugins then ran rebuild again
  2. The app finally rebuilt, then I was able to enter the rails console to add the above column manually.
./launcher enter app
rails db
ActiveRecord::Base.connection.execute("ALTER TABLE flags ADD COLUMN require_message BOOLEAN DEFAULT FALSE;")
exit
exit 
  1. Once the column was present went back i to app.yml and enabled all plugins and did a rebuild again
  2. Rebuild succeeded … and we are up!

Thank you @pfaffman for your prompt response on the weekend no less. We are going to make a new updated droplet and move over. This was suposed to be a quick inplace upgrade from the web interface. But I guess the script doesn’t test docker compatibility. When it upgraded discourse docker then it threw incompatible docker error.

This was fully our fault for saying in such an old version of Ubunutu 16, one of the good and bad things about a stable system is that it tends to linger.

לייק 1

Glad you got it working! That’s quite impressive!

You don’t get to do quick updates when your OS is 4 years beyond EOL. :wink:

לייק 1

יאאפ, למדתי את הלקח תודה שוב!

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.