כפי שהוזכר בכותרת, ה-VPS שלי הותקף. ניסיתי לקבל את הפרטים על גרסת Discourse הנוכחית על ידי הרצת ./discourse-doctor, אך זה נכשל.
למזלנו, הורדתי גיבוי למחשב המקומי שלי.
איך אני יכול לשחזר את המידע על הגרסה הנוכחית מהגיבוי הזה?
תודה.
כפי שהוזכר בכותרת, ה-VPS שלי הותקף. ניסיתי לקבל את הפרטים על גרסת Discourse הנוכחית על ידי הרצת ./discourse-doctor, אך זה נכשל.
למזלנו, הורדתי גיבוי למחשב המקומי שלי.
איך אני יכול לשחזר את המידע על הגרסה הנוכחית מהגיבוי הזה?
תודה.
What problem are you trying to solve? You can restore the backup to any newer version.
אני מתכנן להתקין מחדש את מערכת ההפעלה ואז להקים את הגרסה הקודמת של Discourse כדי להימנע מבעיות תאימות עם תוספים.
דרך אגב, אם VPS הותקף, האם עדיין אפשר לגבות את Discourse? יש לי גיבוי אוטומטי שהוכן לפני כמה ימים בלבד.
That depends on what state they left it in. You could try to go through the rails console:
cd /var/discourse
./launcher enter app
discourse backup
cd public/backups/default
scp * user@destination.example.com:
Your backup filename has the format forumname-2025-05-22-151843-v20250521053324.tar.gz
The long string at the end is the latest migration that has been ran.
To find out which commit it belongs to,
cd /var/www/discourse
git blame db/migrate/20250521053324*
You will now see some output and the left column contains the commit hash.
This is the minimal commit your new forum should be at.
(Sometimes the commit belongs to a plugin, in that case use locate to find the plugin, cd into its directory and do the same git blame stanza)
אני ממליץ פשוט לעדכן לגרסה האחרונה. זה הכי קל, ואין סיכון. אם זה לא יעבוד, אז אפשר לעקוב אחר ההוראות המצוינות האלה כדי למצוא את ה-commit ולשחזר לאותו אחד (ומה גם תתכוון לשחזר כל אחד מהתוספים ל-commit מסוים?).
ניסיון לגבות נתונים נכשל. הפלט הוא כמפורט להלן:
# cd /var/discourse/
/var/discourse# ./launcher enter app
זיהוי ארכיטקטורת x86_64.
/var/www/discourse# discourse backup
התחלת גיבוי...
שגיאה: BackupRestore::OperationRunningError
/var/www/discourse/lib/backup_restore/backuper.rb:70:ב `ensure_no_operation_is_running'
/var/www/discourse/lib/backup_restore/backuper.rb:22:ב `run'
סקריפט/discourse:84:ב `backup'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.1/lib/thor/command.rb:28:ב `run'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.1/lib/thor/invocation.rb:127:ב `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.1/lib/thor.rb:527:ב `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.1/lib/thor/base.rb:584:ב `start'
סקריפט/discourse:290:ב `תת (נדרש)'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:ב `load'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:ב `kernel_load'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:23:ב `run'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:451:ב `exec'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/command.rb:28:ב `run'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:ב `invoke_command'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor.rb:527:ב `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:34:ב `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/base.rb:584:ב `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:28:ב `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/exe/bundle:28:ב `תת (נדרש)'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/friendly_errors.rb:117:ב `with_friendly_errors'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/exe/bundle:20:ב `תת (נדרש)'
/usr/local/bin/bundle:25:ב `load'
/usr/local/bin/bundle:25:ב `ראש (נדרש)'
מחיקת גיבויים קודמים...
ניקוי קבצים...
הסרת שאריות '.tar'...
סימון סיום הגיבוי...
הודעה 'מערכת' על סיום הגיבוי...
הושלם!
[נכשל]
האם זה אומר שלא אוכל לבצע גיבוי?
זה חושב שגיבוי נוסף רץ. אולי תנסה לאתחל את המכולה ואז לנסות שוב.
Thank you for your advice.
I was able to successfully start the backup.
However, the process has been stuck at this point for about 20 minutes (see screenshot below). Is this normal?
Yes, this table can get very large because of a bug, see Clean up user_auth_token_logs?
If it becomes a problem then you could stop the backup, enter the rails console
rails c
UserAuthTokenLog.delete_all
and then restart the backup.
תודה על ההצעה שלך. ביצעתי בהצלחה גיבוי של הנתונים העדכניים.
בנוסף, מכיוון שהמערכת ההפעלה כבר הותקנה מחדש, איך אוכל לשחזר את המצב האחרון ישירות באמצעות קבצי app.yml וגיבויים? קיימת תיעוד רשמי לכך? או שאני צריך לעבור קודם תהליך התקנה סטנדרטי של Docker ואז לייבא את הגיבוי לשחזור הכל?
דרך אגב, כשניסיתי לגלות לאיזה commit תואם גיבוי ה־Discourse שלי, קיבלתי את הפלט הבא. יש לך מושג למה זה יכול להיות?
/var/www/discourse# git blame db/migrate/20240516145911*
fatal: אין נתיב כזה 'db/migrate/20240516145911*' ב־HEAD
[הערה=“Alienazk, פוסט:10, נושא:367077”]
או שאני צריך לעבור תחילה את תהליך ההתקנה הסטנדרטי של Docker, ואז לייבא את הגיבוי כדי לשחזר הכל?
[/הערה]
זה!
[הערה=“Alienazk, פוסט:10, נושא:367077”]
דרך אגב, כשניסיתי לגלות לאיזה commit שייך את גיבוי Discourse שלי, קיבלתי את הפלט הבא. יש לך רעיון למה זה יכול להיות?
[/הערה]
[הערה=“RGJ, פוסט:4, נושא:367077”]
(לפעמים ה-commit שייך לתוסף, במקרה כזה השתמש ב־locate כדי למצוא את התוסף, כנס לתיקייה שלו ועשה שוב את ההצהרת git blame)
[/הערה]
ספוילר: זה שייך לתוסף הצ’אט.
root@testbeta:/var/www/discourse# locate 202405161459
/var/www/discourse/plugins/chat/db/migrate/20240516145911_update_user_options_for_thread_title_prompts.rb
root@testbeta:/var/www/discourse# cd plugins/chat/
root@testbeta:/var/www/discourse/plugins/chat# git blame db/migrate/20240516145911*
Thank you very much!
I’m not quite sure
does this method generate a commit to the Discourse repository itself, rather than to the chat plugin? If so, could you explain the mechanism behind it?
It seems that I could follow this guide?
https://meta.discourse.org/t/restore-a-backup-from-the-command-line/
I tried the way you recommended, but ran into the following issue.
Would you mind taking a look and letting me know what might’ve gone wrong?
/var/www/discourse# locate 20240516145911
/shared/backups/default/discourse-2025-05-24-113557-v20240516145911.tar.gz
/var/www/discourse/plugins/chat/db/post_migrate/20240516145911_update_user_options_for_thread_title_prompts.rb
root@tartali-app:/var/www/discourse# cd plugins/chat/
root@tartali-app:/var/www/discourse/plugins/chat# git blame db/migrate/20240516145911*
fatal: no such path 'plugins/chat/db/migrate/20240516145911*' in HEAD```
מצטער. השגתי את זה באמצעות git blame db/post_migrate/20240516145911*זה הפלט:
root@tartali-app:/var/www/discourse/plugins/chat# git blame db/post_migrate/20240516145911*
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (422/422), done.
remote: Compressing objects: 100% (421/421), done.
remote: Total 2571 (delta 2), reused 1 (delta 1), pack-reused 2149 (from 1)
Receiving objects: 100% (2571/2571), 1008.42 KiB | 14.20 MiB/s, done.
Resolving deltas: 100% (2/2), done.
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (405/405), done.
remote: Compressing objects: 100% (405/405), done.
Receiving objects: 100% (2571/2571), 1007.76 KiB | 21.91 MiB/s, done.
Resolving deltas: 100% (3/3), done.
remote: Total 2571 (delta 3), reused 0 (delta 0), pack-reused 2166 (from 1)
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (413/413), done.
remote: Compressing objects: 100% (413/413), done.
Receiving objects: 100% (2571/2571), 1007.81 KiB | 22.90 MiB/s, done.
Resolving deltas: 100% (3/3), done.
remote: Total 2571 (delta 3), reused 0 (delta 0), pack-reused 2158 (from 1)
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (413/413), done.
remote: Compressing objects: 100% (413/413), done.
remote: Total 2571 (delta 3), reused 0 (delta 0), pack-reused 2158 (from 1)
Receiving objects: 100% (2571/2571), 1007.82 KiB | 22.40 MiB/s, done.
Resolving deltas: 100% (3/3), done.
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (413/413), done.
remote: Compressing objects: 100% (413/413), done.
remote: Total 2571 (delta 3), reused 0 (delta 0), pack-reused 2158 (from 1)
Receiving objects: 100% (2571/2571), 1007.81 KiB | 22.40 MiB/s, done.
Resolving deltas: 100% (3/3), done.
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (405/405), done.
remote: Compressing objects: 100% (405/405), done.
Receiving objects: 100% (2571/2571), 1007.76 KiB | 22.39 MiB/s, done.
Resolving deltas: 100% (3/3), done.
remote: Total 2571 (delta 3), reused 0 (delta 0), pack-reused 2166 (from 1)
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (405/405), done.
remote: Compressing objects: 100% (405/405), done.
Receiving objects: 100% (2571/2571), 1007.76 KiB | 22.39 MiB/s, done.
Resolving deltas: 100% (3/3), done.
remote: Total 2571 (delta 3), reused 0 (delta 0), pack-reused 2166 (from 1)
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (413/413), done.
remote: Compressing objects: 100% (413/413), done.
Receiving objects: 100% (2571/2571), 1007.78 KiB | 23.44 MiB/s, done.
Resolving deltas: 100% (3/3), done.
remote: Total 2571 (delta 3), reused 0 (delta 0), pack-reused 2158 (from 1)
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (422/422), done.
remote: Compressing objects: 100% (421/421), done.
remote: Total 2571 (delta 2), reused 1 (delta 1), pack-reused 2149 (from 1)
Receiving objects: 100% (2571/2571), 1008.39 KiB | 22.92 MiB/s, done..
פותר דלתאות: 100% (2/2), סיום.
מרוחק: מניית אובייקטים: 2571, סיום.
מרוחק: ספירת אובייקטים: 100% (422/422), סיום.
מרוחק: דחיסת אובייקטים: 100% (421/421), סיום.
מרוחק: סך הכל 2571 (דלתא 2), נעשה שימוש חוזר ב-1 (דלתא 1), שימוש חוזר בחבילה 2149 (מתוך 1)
מקבל אובייקטים: 100% (2571/2571), 1008.39 KiB | 22.41 MiB/s, סיום.
פותר דלתאות: 100% (2/2), סיום.
מרוחק: מניית אובייקטים: 2571, סיום.
מרוחק: ספירת אובייקטים: 100% (404/404), סיום.
מרוחק: דחיסת אובייקטים: 100% (404/404), סיום.
מרוחק: סך הכל 2571 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), שימוש חוזר בחבילה 2167 (מתוך 1)
מקבל אובייקטים: 100% (2571/2571), 1007.74 KiB | 21.91 MiB/s, סיום.
פותר דלתאות: 100% (3/3), סיום.
מרוחק: מניית אובייקטים: 2571, סיום.
מרוחק: ספירת אובייקטים: 100% (422/422), סיום.
מרוחק: דחיסת אובייקטים: 100% (421/421), סיום.
מרוחק: סך הכל 2571 (דלתא 2), נעשה שימוש חוזר ב-1 (דלתא 1), שימוש חוזר בחבילה 2149 (מתוך 1)
מקבל אובייקטים: 100% (2571/2571), 1008.40 KiB | 22.92 MiB/s, סיום.
פותר דלתאות: 100% (2/2), סיום.
מרוחק: מניית אובייקטים: 2571, סיום.
מרוחק: ספירת אובייקטים: 100% (422/422), סיום.
מרוחק: דחיסת אובייקטים: 100% (421/421), סיום.
מרוחק: סך הכל 2571 (דלתא 2), נעשה שימוש חוזר ב-1 (דלתא 1), שימוש חוזר בחבילה 2149 (מתוך 1)
מקבל אובייקטים: 100% (2571/2571), 1008.39 KiB | 22.41 MiB/s, סיום.
פותר דלתאות: 100% (2/2), סיום.
מרוחק: מניית אובייקטים: 2571, סיום.
מרוחק: ספירת אובייקטים: 100% (414/414), סיום.
מרוחק: דחיסת אובייקטים: 100% (414/414), סיום.
מקבל אובייקטים: 100% (2571/2571), 1007.78 KiB | 22.90 MiB/s, סיום.
פותר דלתאות: 100% (3/3), סיום.
מרוחק: סך הכל 2571 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), שימוש חוזר בחבילה 2157 (מתוך 1)
מרוחק: מניית אובייקטים: 2571, סיום.
מרוחק: ספירת אובייקטים: 100% (403/403), סיום.
מרוחק: דחיסת אובייקטים: 100% (403/403), סיום.
מרוחק: סך הכל 2571 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), שימוש חוזר בחבילה 2168 (מתוך 1)
מקבל אובייקטים: 100% (2571/2571), 1007.66 KiB | 22.39 MiB/s, סיום.
פותר דלתאות: 100% (3/3), סיום.
מרוחק: מניית אובייקטים: 2571, סיום.
מרוחק: ספירת אובייקטים: 100% (413/413), סיום.
מרוחק: דחיסת אובייקטים: 100% (413/413), סיום.
מרוחק: סך הכל 2571 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), שימוש חוזר בחבילה 2158 (מתוך 1)
מקבל אובייקטים: 100% (2571/2571), 1007.70 KiB | 12.44 MiB/s, סיום.
פותר דלתאות: 100% (3/3), סיום.
מרוחק: מניית אובייקטים: 2571, סיום.
מרוחק: ספירת אובייקטים: 100% (412/412), סיום.
מרוחק: דחיסת אובייקטים: 100% (412/412), סיום.
מרוחק: סך הכל 2571 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), שימוש חוזר בחבילה 2159 (מתוך 1)
מקבל אובייקטים: 100% (2571/2571), 1007.71 KiB | 22.39 MiB/s, סיום.
פותר דלתאות: 100% (3/3), סיום.
מרוחק: מניית אובייקטים: 2571, סיום.
מרוחק: ספירת אובייקטים: 100% (419/419), סיום.
מרוחק: דחיסת אובייקטים: 100% (418/418), סיום.
מרוחק: סך הכל 2571 (דלתא 2), נעשה שימוש חוזר ב-1 (דלתא 1), שימוש חוזר בחבילה 2152 (מתוך 1)
מקבל אובייקטים: 100% (2571/2571), 1008.31 KiB | 21.92 MiB/s, סיום.
פותר דלתאות: 100% (2/2), סיום.
מרוחק: מניית אובייקטים: 2571, סיום..
מרוחק: ספירת אובייקטים: 100% (404/404), סיום.
מרוחק: דחיסת אובייקטים: 100% (404/404), סיום.
מרוחק: סך הכל 2571 (דלתא 3), שימוש חוזר 0 (דלתא 0), שימוש חוזר בחבילה 2167 (מ-1)
קבלה אובייקטים: 100% (2571/2571), 1007.66 KiB | 22.90 MiB/s, סיום.
פתרון דלתות: 100% (3/3), סיום.
מרוחק: ספירת אובייקטים: 2571, סיום.
מרוחק: ספירת אובייקטים: 100% (414/414), סיום.
מרוחק: דחיסת אובייקטים: 100% (414/414), סיום.
מרוחק: סך הכל 2571 (דלתא 3), שימוש חוזר 0 (דלתא 0), שימוש חוזר בחבילה 2157 (מ-1)
קבלה אובייקטים: 100% (2571/2571), 1007.70 KiB | 12.00 MiB/s, סיום.
פתרון דלתות: 100% (3/3), סיום.
מרוחק: ספירת אובייקטים: 2571, סיום.
מרוחק: ספירת אובייקטים: 100% (412/412), סיום.
מרוחק: דחיסת אובייקטים: 100% (412/412), סיום.
מרוחק: סך הכל 2571 (דלתא 3), שימוש חוזר 0 (דלתא 0), שימוש חוזר בחבילה 2159 (מ-1)
קבלה אובייקטים: 100% (2571/2571), 1007.70 KiB | 22.39 MiB/s, סיום.
פתרון דלתות: 100% (3/3), סיום.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (416/416), סיום.
מרוחק: דחיסת אובייקטים: 100% (416/416), סיום.
קבלה אובייקטים: 100% (2569/2569), 1006.98 KiB | 22.89 MiB/s, סיום.
מרוחק: סך הכל 2569 (דלתא 3), שימוש חוזר 0 (דלתא 0), שימוש חוזר בחבילה 2153 (מ-1)
פתרון דלתות: 100% (3/3), סיום.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (418/418), סיום.
מרוחק: דחיסת אובייקטים: 100% (417/417), סיום.
קבלה אובייקטים: 100% (2569/2569), 1007.58 KiB | 22.90 MiB/s, סיום.
מרוחק: סך הכל 2569 (דלתא 2), שימוש חוזר 1 (דלתא 1), שימוש חוזר בחבילה 2151 (מ-1)
פתרון דלתות: 100% (2/2), סיום.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (405/405), סיום.
מרוחק: דחיסת אובייקטים: 100% (405/405), סיום.
מרוחק: סך הכל 2569 (דלתא 3), שימוש חוזר 0 (דלתא 0), שימוש חוזר בחבילה 2164 (מ-1)
קבלה אובייקטים: 100% (2569/2569), 1006.90 KiB | 22.88 MiB/s, סיום.
פתרון דלתות: 100% (3/3), סיום.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (417/417), סיום.
מרוחק: דחיסת אובייקטים: 100% (416/416), סיום.
מרוחק: סך הכל 2569 (דלתא 2), שימוש חוזר 1 (דלתא 1), שימוש חוזר בחבילה 2152 (מ-1)
קבלה אובייקטים: 100% (2569/2569), 1007.75 KiB | 20.57 MiB/s, סיום.
פתרון דלתות: 100% (2/2), סיום.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (417/417), סיום.
מרוחק: דחיסת אובייקטים: 100% (416/416), סיום.
מרוחק: סך הכל 2569 (דלתא 2), שימוש חוזר 1 (דלתא 1), שימוש חוזר בחבילה 2152 (מ-1)
קבלה אובייקטים: 100% (2569/2569), 1007.74 KiB | 23.44 MiB/s, סיום.
פתרון דלתות: 100% (2/2), סיום.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (417/417), סיום.
מרוחק: דחיסת אובייקטים: 100% (416/416), סיום.
מרוחק: סך הכל 2569 (דלתא 2), שימוש חוזר 1 (דלתא 1), שימוש חוזר בחבילה 2152 (מ-1)
קבלה אובייקטים: 100% (2569/2569), 1007.55 KiB | 23.43 MiB/s, סיום.
פתרון דלתות: 100% (2/2), סיום.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (417/417), סיום.
מרוחק: דחיסת אובייקטים: 100% (416/416), סיום.remote: סה״כ 2569 (דלתא 2), נעשה שימוש חוזר ב-1 (דלתא 1), נעשה שימוש חוזר בחבילה 2152 (מתוך 1)
מקבל אובייקטים: 100% (2569/2569), 1007.56 KiB | 23.43 MiB/s, סיום.
פתרון דלתאות: 100% (2/2), סיום.
remote: ספירת אובייקטים: 2569, סיום.
remote: ספירת אובייקטים: 100% (418/418), סיום.
remote: דחיסת אובייקטים: 100% (417/417), סיום.
remote: סה״כ 2569 (דלתא 2), נעשה שימוש חוזר ב-1 (דלתא 1), נעשה שימוש חוזר בחבילה 2151 (מתוך 1)
מקבל אובייקטים: 100% (2569/2569), 1007.56 KiB | 10.72 MiB/s, סיום.
פתרון דלתאות: 100% (2/2), סיום.
remote: ספירת אובייקטים: 2569, סיום.
remote: ספירת אובייקטים: 100% (405/405), סיום.
remote: דחיסת אובייקטים: 100% (405/405), סיום.
remote: סה״כ 2569 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), נעשה שימוש חוזר בחבילה 2164 (מתוך 1)
מקבל אובייקטים: 100% (2569/2569), 1006.91 KiB | 22.38 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
remote: ספירת אובייקטים: 2569, סיום.
remote: ספירת אובייקטים: 100% (404/404), סיום.
remote: דחיסת אובייקטים: 100% (404/404), סיום.
remote: סה״כ 2569 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), נעשה שימוש חוזר בחבילה 2165 (מתוך 1)
מקבל אובייקטים: 100% (2569/2569), 1006.90 KiB | 22.38 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
remote: ספירת אובייקטים: 2569, סיום.
remote: ספירת אובייקטים: 100% (404/404), סיום.
remote: דחיסת אובייקטים: 100% (404/404), סיום.
מקבל אובייקטים: 100% (2569/2569), 1006.88 KiB | 22.88 MiB/s, סיום.
remote: סה״כ 2569 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), נעשה שימוש חוזר בחבילה 2165 (מתוך 1)
פתרון דלתאות: 100% (3/3), סיום.
remote: ספירת אובייקטים: 2569, סיום.
remote: ספירת אובייקטים: 100% (416/416), סיום.
remote: דחיסת אובייקטים: 100% (416/416), סיום.
remote: סה״כ 2569 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), נעשה שימוש חוזר בחבילה 2153 (מתוך 1)
מקבל אובייקטים: 100% (2569/2569), 1006.89 KiB | 5.47 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
remote: ספירת אובייקטים: 2569, סיום.
remote: ספירת אובייקטים: 100% (415/415), סיום.
remote: דחיסת אובייקטים: 100% (415/415), סיום.
מקבל אובייקטים: 100% (2569/2569), 1006.89 KiB | 22.88 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
remote: סה״כ 2569 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), נעשה שימוש חוזר בחבילה 2154 (מתוך 1)
remote: ספירת אובייקטים: 2569, סיום.
remote: ספירת אובייקטים: 100% (415/415), סיום.
remote: דחיסת אובייקטים: 100% (415/415), סיום.
מקבל אובייקטים: 100% (2569/2569), 1006.89 KiB | 21.42 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
remote: סה״כ 2569 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), נעשה שימוש חוזר בחבילה 2154 (מתוך 1)
remote: ספירת אובייקטים: 2569, סיום.
remote: ספירת אובייקטים: 100% (416/416), סיום.
remote: דחיסת אובייקטים: 100% (415/415), סיום.
remote: סה״כ 2569 (דלתא 2), נעשה שימוש חוזר ב-1 (דלתא 1), נעשה שימוש חוזר בחבילה 2153 (מתוך 1)
מקבל אובייקטים: 100% (2569/2569), 1007.50 KiB | 23.43 MiB/s, סיום.
פתרון דלתאות: 100% (2/2), סיום.
remote: ספירת אובייקטים: 2569, סיום.
remote: ספירת אובייקטים: 100% (405/405), סיום.
remote: דחיסת אובייקטים: 100% (405/405), סיום..
מרוחק: סך הכל 2569 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), נעשה שימוש חוזר בחבילה 2164 (מתוך 1)
מקבל אובייקטים: 100% (2569/2569), 1006.63 KiB | 13.98 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (405/405), סיום.
מרוחק: דחיסת אובייקטים: 100% (405/405), סיום.
מרוחק: סך הכל 2569 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), נעשה שימוש חוזר בחבילה 2164 (מתוך 1)
מקבל אובייקטים: 100% (2569/2569), 1006.63 KiB | 19.36 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
ראה "git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (417/417), סיום.
מרוחק: דחיסת אובייקטים: 100% (416/416), סיום.
מרוחק: סך הכל 2569 (דלתא 2), נעשה שימוש חוזר ב-1 (דלתא 1), נעשה שימוש חוזר בחבילה 2152 (מתוך 1)
מקבל אובייקטים: 100% (2569/2569), 1007.29 KiB | 15.50 MiB/s, סיום.
פתרון דלתאות: 100% (2/2), סיום.
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
ראה "git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (405/405), סיום.
מרוחק: דחיסת אובייקטים: 100% (405/405), סיום.
מרוחק: סך הכל 2569 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), נעשה שימוש חוזר בחבילה 2164 (מתוך 1)
מקבל אובייקטים: 100% (2569/2569), 1006.63 KiB | 16.50 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
ראה "git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (405/405), סיום.
מרוחק: דחיסת אובייקטים: 100% (405/405), סיום.
מקבל אובייקטים: 100% (2569/2569), 1006.63 KiB | 22.37 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
מרוחק: סך הכל 2569 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), נעשה שימוש חוזר בחבילה 2164 (מתוך 1)
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
ראה "git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (417/417), סיום.
מרוחק: דחיסת אובייקטים: 100% (416/416), סיום.
מרוחק: סך הכל 2569 (דלתא 2), נעשה שימוש חוזר ב-1 (דלתא 1), נעשה שימוש חוזר בחבילה 2152 (מתוך 1)
מקבל אובייקטים: 100% (2569/2569), 1007.29 KiB | 22.89 MiB/s, סיום.
פתרון דלתאות: 100% (2/2), סיום.
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
ראה "git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (405/405), סיום.
מרוחק: דחיסת אובייקטים: 100% (405/405), סיום.
מרוחק: סך הכל 2569 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), נעשה שימוש חוזר בחבילה 2164 (מתוך 1)
מקבל אובייקטים: 100% (2569/2569), 1006.63 KiB | 21.42 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
ראה "git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (416/416), סיום.
מרוחק: דחיסת אובייקטים: 100% (416/416), סיום.
מקבל אובייקטים: 100% (2569/2569), 1006.67 KiB | 20.13 MiB/s, סיום..
פתרון דלתאות: 100% (3/3), סיום.
מרוחק: סה"כ 2569 (דלתא 3), שימוש חוזר 0 (דלתא 0), שימוש חוזר באריזה 2153 (מתוך 1)
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
עיין ב-"git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (417/417), סיום.
מרוחק: דחיסת אובייקטים: 100% (416/416), סיום.
מרוחק: סה"כ 2569 (דלתא 2), שימוש חוזר 1 (דלתא 1), שימוש חוזר באריזה 2152 (מתוך 1)
קבלה של אובייקטים: 100% (2569/2569), 1007.29 KiB | 21.43 MiB/s, סיום.
פתרון דלתאות: 100% (2/2), סיום.
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
עיין ב-"git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (416/416), סיום.
מרוחק: דחיסת אובייקטים: 100% (416/416), סיום.
מרוחק: סה"כ 2569 (דלתא 3), שימוש חוזר 0 (דלתא 0), שימוש חוזר באריזה 2153 (מתוך 1)
קבלה של אובייקטים: 100% (2569/2569), 1006.68 KiB | 21.88 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
עיין ב-"git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (415/415), סיום.
מרוחק: דחיסת אובייקטים: 100% (414/414), סיום.
קבלה של אובייקטים: 100% (2569/2569), 1007.28 KiB | 23.42 MiB/s, סיום.
פתרון דלתאות: 100% (2/2), סיום.
מרוחק: סה"כ 2569 (דלתא 2), שימוש חוזר 1 (דלתא 1), שימוש חוזר באריזה 2154 (מתוך 1)
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
עיין ב-"git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (415/415), סיום.
מרוחק: דחיסת אובייקטים: 100% (415/415), סיום.
מרוחק: סה"כ 2569 (דלתא 3), שימוש חוזר 0 (דלתא 0), שימוש חוזר באריזה 2154 (מתוך 1)
קבלה של אובייקטים: 100% (2569/2569), 1006.68 KiB | 17.98 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
עיין ב-"git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (417/417), סיום.
מרוחק: דחיסת אובייקטים: 100% (416/416), סיום.
קבלה של אובייקטים: 100% (2569/2569), 1007.29 KiB | 22.89 MiB/s, סיום.
פתרון דלתאות: 100% (2/2), סיום.
מרוחק: סה"כ 2569 (דלתא 2), שימוש חוזר 1 (דלתא 1), שימוש חוזר באריזה 2152 (מתוך 1)
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
עיין ב-"git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (404/404), סיום.
מרוחק: דחיסת אובייקטים: 100% (404/404), סיום.
מרוחק: סה"כ 2569 (דלתא 3), שימוש חוזר 0 (דלתא 0), שימוש חוזר באריזה 2165 (מתוך 1)
קבלה של אובייקטים: 100% (2569/2569), 1006.63 KiB | 20.54 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
עיין ב-"git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (416/416), סיום.
מרוחק: דחיסת אובייקטים: 100% (416/416), סיום..
מרוחק: סך הכל 2569 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), נעשה שימוש חוזר בחבילה 2153 (מ-1)
מקבל אובייקטים: 100% (2569/2569), 1006.68 KiB | 22.88 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
ראה "git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (404/404), סיום.
מרוחק: דחיסת אובייקטים: 100% (404/404), סיום.
מרוחק: סך הכל 2569 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), נעשה שימוש חוזר בחבילה 2165 (מ-1)
מקבל אובייקטים: 100% (2569/2569), 1006.63 KiB | 19.74 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
ראה "git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (415/415), סיום.
מרוחק: דחיסת אובייקטים: 100% (415/415), סיום.
מרוחק: סך הכל 2569 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), נעשה שימוש חוזר בחבילה 2154 (מ-1)
מקבל אובייקטים: 100% (2569/2569), 1006.68 KiB | 14.18 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
ראה "git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (416/416), סיום.
מרוחק: דחיסת אובייקטים: 100% (415/415), סיום.
מקבל אובייקטים: 100% (2569/2569), 1007.14 KiB | 22.89 MiB/s, סיום.
פתרון דלתאות: 100% (2/2), סיום.
מרוחק: סך הכל 2569 (דלתא 2), נעשה שימוש חוזר ב-1 (דלתא 1), נעשה שימוש חוזר בחבילה 2153 (מ-1)
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
ראה "git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (416/416), סיום.
מרוחק: דחיסת אובייקטים: 100% (416/416), סיום.
מרוחק: סך הכל 2569 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), נעשה שימוש חוזר בחבילה 2153 (מ-1)
מקבל אובייקטים: 100% (2569/2569), 1006.54 KiB | 22.37 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
ראה "git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (404/404), סיום.
מרוחק: דחיסת אובייקטים: 100% (404/404), סיום.
מקבל אובייקטים: 100% (2569/2569), 1006.49 KiB | 22.37 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
מרוחק: סך הכל 2569 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), נעשה שימוש חוזר בחבילה 2165 (מ-1)
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
ראה "git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (416/416), סיום.
מרוחק: דחיסת אובייקטים: 100% (416/416), סיום.
מרוחק: סך הכל 2569 (דלתא 3), נעשה שימוש חוזר ב-0 (דלתא 0), נעשה שימוש חוזר בחבילה 2153 (מ-1)
מקבל אובייקטים: 100% (2569/2569), 1006.53 KiB | 22.37 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
ראה "git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (416/416), סיום..
מרוחק: דחיסת אובייקטים: 100% (416/416), סיום.
מרוחק: סך הכל 2569 (דלתא 3), שימוש חוזר 0 (דלתא 0), אריזה חוזרת 2153 (מ-1)
מקבל אובייקטים: 100% (2569/2569), 1006.53 KiB | 18.99 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
ראה "git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (404/404), סיום.
מרוחק: דחיסת אובייקטים: 100% (404/404), סיום.
מקבל אובייקטים: 100% (2569/2569), 1006.51 KiB | 22.37 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
מרוחק: סך הכל 2569 (דלתא 3), שימוש חוזר 0 (דלתא 0), אריזה חוזרת 2165 (מ-1)
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
ראה "git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (404/404), סיום.
מרוחק: דחיסת אובייקטים: 100% (404/404), סיום.
מקבל אובייקטים: 100% (2569/2569), 1006.51 KiB | 22.88 MiB/s, סיום.
מרוחק: סך הכל 2569 (דלתא 3), שימוש חוזר 0 (דלתא 0), אריזה חוזרת 2165 (מ-1)
פתרון דלתאות: 100% (3/3), סיום.
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
ראה "git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (417/417), סיום.
מרוחק: דחיסת אובייקטים: 100% (417/417), סיום.
מרוחק: סך הכל 2569 (דלתא 2), שימוש חוזר 0 (דלתא 0), אריזה חוזרת 2152 (מ-1)
מקבל אובייקטים: 100% (2569/2569), 1007.17 KiB | 13.80 MiB/s, סיום.
פתרון דלתאות: 100% (2/2), סיום.
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
ראה "git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (416/416), סיום.
מרוחק: דחיסת אובייקטים: 100% (416/416), סיום.
מקבל אובייקטים: 100% (2569/2569), 1006.56 KiB | 22.88 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
מרוחק: סך הכל 2569 (דלתא 3), שימוש חוזר 0 (דלתא 0), אריזה חוזרת 2153 (מ-1)
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
ראה "git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (416/416), סיום.
מרוחק: דחיסת אובייקטים: 100% (416/416), סיום.
מרוחק: סך הכל 2569 (דלתא 3), שימוש חוזר 0 (דלתא 0), אריזה חוזרת 2153 (מ-1)
מקבל אובייקטים: 100% (2569/2569), 1006.56 KiB | 11.44 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
ראה "git help gc" לתחזוקה ידנית.
מרוחק: ספירת אובייקטים: 2569, סיום.
מרוחק: ספירת אובייקטים: 100% (405/405), סיום.
מרוחק: דחיסת אובייקטים: 100% (405/405), סיום.
מקבל אובייקטים: 100% (2569/2569), 1006.45 KiB | 21.88 MiB/s, סיום.
פתרון דלתאות: 100% (3/3), סיום.
מרוחק: סך הכל 2569 (דלתא 3), שימוש חוזר 0 (דלתא 0), אריזה חוזרת 2164 (מ-1)
אריזה אוטומטית של המאגר ברקע לביצועים מיטביים.
ראה "git help gc" לתחזוקה ידנית.
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 1) # frozen_string_literal: true
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 2)
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 3) class UpdateUserOptionsForThreadTitlePrompts
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 4) def up
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 5) change_column_default :user_options, :show_thread_title_prompts, true
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 6)
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 7) if DB.query_single(
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 8) "SELECT 1 FROM user_options WHERE show_thread_title_prompts IS NULL LIMIT 1",
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 9) ).first
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 10) batch_size = 100_000
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 11) min_id = DB.query_single("SELECT MIN(user_id) FROM user_options").first.to_i
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 12) max_id = DB.query_single("SELECT MAX(user_id) FROM user_options").first.to_i
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 13) while max_id >= min_id
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 14) DB.exec(
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 15) "UPDATE user_options SET show_thread_title_prompts = true WHERE user_id > #{max_id - batch_size} AND user_id <= #{max_id}",
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 16) )
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 17) max_id -= batch_size
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 18) end
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 19) end
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 20)
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 21) change_column_null :user_options, :show_thread_title_prompts, false
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 22) end
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 23)
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 24) def down
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 25) end
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 26) end
:...דילוג...
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 1) # frozen_string_literal: true
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 2)
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 3) class UpdateUserOptionsForThreadTitlePrompts
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.