Hallo, ich poste hier, nachdem ich alles versucht habe und bei meinem Upgrade stecken geblieben bin.
Ich habe das Forum nach vielen Monaten aktualisiert. Ich habe wie üblich ein Backup erstellt und es heruntergeladen.
Anscheinend gibt es bei diesem Update-Prozess eine Migration von PG 13 zu 15.
Alles lief problemlos, bis das Update fehlschlug, weil ich aufgrund von Platzmangel unterbrochen wurde.
Ich ging zu meinem Digitalocean-Droplet, stoppte es, erweiterte die Festplatte und schaltete es wieder ein.
Ich habe einige reguläre Befehle ausgeführt, um Speicherplatz freizugeben (alte Protokolle entfernen, ./launcher cleanup usw.).
Also startete ich den Rebuild und stieß dann auf die erste Hürde:
root@discourse-ubuntu-s-2vcpu-4gb-fra1-01:/var/discourse# ./launcher rebuild app
WARNUNG: Docker Version 20.10.1 ist veraltet, es wird empfohlen, auf 24.0.7 oder neuer zu aktualisieren.
x86_64-Architektur erkannt.
WARNUNG: Die Datei containers/app.yml ist für alle Welt lesbar.
Update:
Ich versuche immer noch Dinge aus. An diesem Punkt möchte ich einfach zu einem Build zurückkehren, der PG13 unterstützt, damit ich mein Backup wiederherstellen kann, aber ich bin immer noch blockiert, das zu versuchen.
Der Commit-Hash vor dem Upgrade war v3.3.0.beta6 +294, ich versuche, diesen über YML neu zu erstellen, aber es wird immer noch Folgendes beim Aufbau angezeigt:
root@discourse-ubuntu-s-2vcpu-4gb-fra1-01:/var/discourse# ./launcher rebuild app
WARNING: Docker version 20.10.1 deprecated, recommend upgrade to 24.0.7 or newer.
x86_64 arch detected.
WARNING: We are about to start downloading the Discourse base image
This process may take anywhere between a few minutes to an hour, depending on your network speed
Please be patient
2.0.20250226-0128: Pulling from discourse/base
af302e5c37e9: Pull complete
ed49ab5c933d: Pull complete
4d13d450f300: Pull complete
a67afd5cca97: Pull complete
d22a5b6769a6: Pull complete
83c133b53b22: Pull complete
fec147508f0c: Pull complete
21850d8b3ba1: Pull complete
02e250b6bcc4: Pull complete
71ba5ea7da00: Pull complete
ddcfbf6d2647: Pull complete
9c3e54d34536: Pull complete
29ce98d2d62d: Pull complete
4c9694455fd5: Pull complete
58a8ebcc6563: Pull complete
9c8966f1f999: Pull complete
b3dde96c4217: Pull complete
f934de9e2e8d: Pull complete
834e25f513a1: Pull complete
85d3cf606a95: Pull complete
94331a6982ee: Pull complete
14936beb0e9f: Pull complete
3ef05b122d47: Pull complete
6c2dff13a1e7: Pull complete
7682543ad38b: Pull complete
f16f8d5c5a04: Pull complete
06d7037d56ef: Pull complete
bc6c17ae1969: Pull complete
d19f089ead0e: Pull complete
Digest: sha256:6f18aa2cd22bba0deb91d69194e577d4f96130ad555ae8ec646a8792cbfe37db
Status: Downloaded newer image for discourse/base:2.0.20250226-0128
docker.io/discourse/base:2.0.20250226-0128
WARNING: containers/app.yml file is world-readable. You can secure this file by running: chmod o-rwx containers/app.yml
Ensuring launcher is up to date
Fetching origin
Launcher is up-to-date
2.0.20250226-0128: Pulling from discourse/base
Digest: sha256:6f18aa2cd22bba0deb91d69194e577d4f96130ad555ae8ec646a8792cbfe37db
Status: Image is up to date for discourse/base:2.0.20250226-0128
docker.io/discourse/base:2.0.20250226-0128
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups.rb
/usr/local/bin/pups --stdin
I, [2025-06-11T09:54:52.350929 #1] INFO -- : Reading from stdin
I, [2025-06-11T09:54:52.357807 #1] INFO -- : DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-15 postgresql-client-15 postgresql-contrib-15 postgresql-15-pgvector
E: Problem executing scripts DPkg::Post-Invoke 'rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true'
E: Sub-process returned an error code
I, [2025-06-11T09:54:53.837808 #1] INFO -- : Reading package lists...
Building dependency tree...
Reading state information...
The following packages were automatically installed and are no longer required:
libcommon-sense-perl libio-pty-perl libipc-run-perl libjson-perl
libjson-xs-perl libllvm19 libtypes-serialiser-perl libz3-4
postgresql-client-common postgresql-common postgresql-common-dev ssl-cert
Use 'apt autoremove' to remove them.
The following packages will be REMOVED:
postgresql-15* postgresql-15-pgvector* postgresql-client-15*
0 upgraded, 0 newly installed, 3 to remove and 0 not upgraded.
After this operation, 60.9 MB disk space will be freed.
(Reading database ... 33951 files and directories currently installed.)
Removing postgresql-15-pgvector (0.8.0-1.pgdg120+1) ...
Removing postgresql-15 (15.12-1.pgdg120+1) ...
invoke-rc.d: could not determine current runlevel
update-alternatives: warning: forcing reinstallation of alternative /usr/share/postgresql/15/man/man1/psql.1.gz because link group psql.1.gz is broken
Removing postgresql-client-15 (15.12-1.pgdg120+1) ...
Processing triggers for postgresql-common (274.pgdg120+1) ...
Building PostgreSQL dictionaries from installed myspell/hunspell packages...
Removing obsolete dictionary files:
(Reading database ... 31913 files and directories currently installed.)
Purging configuration files for postgresql-15 (15.12-1.pgdg120+1) ...
Dropping cluster main...
FAILED
--------------------
Pups::ExecError: DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-15 postgresql-client-15 postgresql-contrib-15 postgresql-15-pgvector failed with return # Process::Status: pid 7 exit 100>
Ort des Fehlers: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec fehlgeschlagen mit den Parametern "DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-15 postgresql-client-15 postgresql-contrib-15 postgresql-15-pgvector"
Bootstrap fehlgeschlagen mit Exit-Code 100
** BOOTSTRAP FEHLGESCHLAGEN ** bitte scrollen Sie nach oben und suchen Sie nach früheren Fehlermeldungen, es sind möglicherweise mehrere vorhanden.
./discourse-doctor kann bei der Diagnose des Problems helfen.
a609309cf458b146e5650d21103bf084e9bf66843e46e627827f50b6f8c03376
Wenn du ein Backup gemacht hast, wie du sagtest, ist es am einfachsten, ein neues Droplet zu starten, Move a Discourse site to another VPS with rsync zu befolgen (aber kopiere keine Datenbankdateien) und dann dein Backup wiederherzustellen.
Hallo Jay! Vielen Dank für deine Antwort. Habe gerade damit angefangen, das Droplet wird gerade eingerichtet.
Kurze Frage: Ich habe meine Backup-Datei heruntergeladen, bevor ich mit dem Update begonnen habe. Dies ist die Datei: forumname-2025-06-11-060249-v20240807024301.tar.gz (4,6 GB komprimiert)Die Forenversion war v3.3.0.beta6 +294 mit PG13.
Ich hatte vor, das neue Droplet zu initialisieren und diese Version in der app.yml zu erzwingen, wie zum Beispiel:
## Dies ist die All-in-One, eigenständige Discourse Docker Container-Vorlage
##
## Nach Änderungen an dieser Datei MÜSSEN Sie neu erstellen
## /var/discourse/launcher rebuild app
##
## SEIEN SIE *SEHR* VORSICHTIG BEIM BEARBEITEN!
## YAML-DATEIEN SIND SUPER SUPER EMPFINDLICH GEGEN FEHLER BEI LEERZEICHEN ODER AUSRICHTUNG!
## Besuchen Sie http://www.yamllint.com/, um diese Datei nach Bedarf zu validieren.
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Kommentieren Sie diese beiden Zeilen aus, wenn Sie Lets Encrypt (https) hinzufügen möchten
- "templates/web.ssl.template.yml"
- "templates/web.letsencrypt.ssl.template.yml"
## Welche TCP/IP-Ports soll dieser Container verfügbar machen?
## Wenn Sie möchten, dass Discourse einen Port mit einem anderen Webserver wie Apache oder nginx teilt,
## siehe https://meta.discourse.org/t/17247 für Details
expose:
- "80:80" # http
- "443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
## Setzen Sie db_shared_buffers auf maximal 25% des Gesamtspeichers.
## wird automatisch von bootstrap basierend auf dem erkannten RAM gesetzt, oder Sie können überschreiben
db_shared_buffers: "1024MB"
## kann die Sortierleistung verbessern, erhöht aber den Speicherverbrauch pro Verbindung
#db_work_mem: "40MB"
## Welche Git-Revision soll dieser Container verwenden? (Standard: tests-passed)
version: v3.3.0.beta6
Und dann, wenn das neue Forum läuft, das Backup von dort importieren.
Macht das Sinn? Oder fehlt mir ein wichtiger Parameter oder Schritt?
Vielen Dank nochmals, Jay, für deine Antwort. Ich weiß deine Zeit, die du mir durch diesen Albtraum hilfst, sehr zu schätzen.
Ich versuche es auf diese Weise (die Version im YML erzwingen), aber anscheinend ist discourse_docker (noch) nicht glücklich mit dieser Änderung:
FAILED
--------------------
Pups::ExecError: grep -q 'outlets/before-server' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'Der Nginx-Outlet \"before-server\" fehlt. Diese Version von discourse_docker ist nicht mit der gewählten Discourse-Version kompatibel.' ; exit 1 ) fehlgeschlagen mit Rückgabe #<Process::Status: pid 2788 exit 1>
Ort des Fehlschlags: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in spawn'
exec fehlgeschlagen mit den Parametern {"cmd"=>["cp $home/config/nginx.sample.conf /etc/nginx/conf.d/discourse.conf", "rm /etc/nginx/sites-enabled/default", "mkdir -p /var/nginx/cache", "grep -q 'outlets/before-server' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'Der Nginx-Outlet \\\"before-server\\\" fehlt. Diese Version von discourse_docker ist nicht mit der gewählten Discourse-Version kompatibel.' ; exit 1 )", "grep -q 'outlets/server' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'Der Nginx-Outlet \\\"server\\\" fehlt. Diese Version von discourse_docker ist nicht mit der gewählten Discourse-Version kompatibel.' ; exit 1 )", "grep -q 'outlets/discourse' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'Der Nginx-Outlet \\\"discourse\\\" fehlt. Diese Version von discourse_docker ist nicht mit der gewählten Discourse-Version kompatibel.' ; exit 1 )", "mkdir -p /etc/nginx/conf.d/outlets/before-server", "touch /etc/nginx/conf.d/outlets/before-server/20-redirect-http-to-https.conf", "touch /etc/nginx/conf.d/outlets/before-server/30-ratelimited.conf", "mkdir -p /etc/nginx/conf.d/outlets/server", "touch /etc/nginx/conf.d/outlets/server/10-http.conf", "touch /etc/nginx/conf.d/outlets/server/20-https.conf", "touch /etc/nginx/conf.d/outlets/server/30-offline-page.conf", "mkdir -p /etc/nginx/conf.d/outlets/discourse", "touch /etc/nginx/conf.d/outlets/discourse/20-https.conf", "touch /etc/nginx/conf.d/outlets/discourse/30-ratelimited.conf"]}
bootstrap fehlgeschlagen mit Exit-Code 1
** BOOTSTRAP FEHLGESCHLAGEN ** Bitte scrolle nach oben und suche nach früheren Fehlermeldungen, es kann mehr als eine geben.
./discourse-doctor kann helfen, das Problem zu diagnostizieren.
d511b0ec31ac912c99c682611c35bbb446dde1488e1762aa07ccd24690c63164
2/2
Bevor ich das Update durchführte, habe ich ein Screenshot von der aktuellen Version gemacht, nur für den Fall. Gibt es eine Möglichkeit, discourse_docker auf eine kompatible ältere Version zu zwingen?
Ich suche schon auf Google und hier im Meta, aber bisher nichts darüber, wie man das macht.
Kurze Frage: Wenn das Backup von einer alten Version von Discourse stammt, die PG13 verwendet hat, werde ich dann Probleme haben, das Backup in die neueste Version von Discourse mit PG15 zu importieren?
Entschuldigung @pfaffman, ich habe eine vorherige Nachricht geschrieben, in der ich dachte, das Problem sei behoben, aber dann gab es eine Wendung.
Nach langer Importzeit sah ich, wie das Forum wieder online war und alle Beiträge usw. auflistete.
Im Terminal stand im Protokoll:
[...]
-- execute("DELETE FROM site_settings WHERE name='warn_reviving_old_topic_age'")
-\" > 0.0002s
== 20250609115711 RemoveComposerTipsSiteSettings: migrated (0.0012s) ==========
Reconnecting to the database...
Reloading site settings...
Disabling outgoing emails for non-staff users...
Disabling readonly mode...
Clearing category cache...
Reloading translations...
Remapping uploads...
Restoring uploads, this may take a while...
Migrating uploads to S3 for 'default'...
Uploading files to S3...
- Listing local files
= > 5 files
- Listing S3 files
............................................................................................................................................................................ = > 171490 files
- Syncing files to S3
.....
Updating the URLs in the database...
Ich war eine Weile dort und dachte, es sei nur meine Term-Verbindung. Einige Minuten später wurde der Vorgang jedoch weiterhin mit einem Fehler beendet:
490 files
- Syncing files to S3
.....
Updating the URLs in the database...
Removing old optimized images...
Flagging all posts containing lightboxes for rebake...
76198 posts were flagged for a rebake
EXCEPTION: 903 posts are not remapped to new S3 upload URL. S3 migration failed for db 'default'.
/var/www/discourse/lib/file_store/to_s3_migration.rb:132:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:81:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:383:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:59:in `migrate'
/var/www/discourse/lib/file_store/s3_store.rb:354:in `copy_from'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:69:in `restore_uploads'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:49:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:167:in `restore_uploads'
/var/www/discourse/lib/backup_restore/restorer.rb:71:in `run'
script/discourse:191:in `restore'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor/command.rb:28:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor.rb:538:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor/base.rb:584:in `start'
script/discourse:345:in ` (required)'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in `load'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in `kernel_load'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:452:in `exec'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor.rb:538:in `dispatch'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:35:in `dispatch'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:29:in `start'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/exe/bundle:28:in `block in (required)'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/exe/bundle:20:in ` (required)'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `'
Trying to rollback...
Rolling back...
Cleaning stuff up...
Dropping functions from the discourse_functions schema...
Removing tmp '/var/www/discourse/tmp/restores/default/2025-06-11-121115' directory...
Unpausing sidekiq...
Marking restore as finished...
Notifying 'system' of the end of the restore...
Finished!
[FAILED]
Restore done.
```Plötzlich waren in dem Forum, das "wiederhergestellt" wurde, alle Beiträge verschwunden, so dass nur noch ein paar Themen übrig blieben.
Da im Protokoll steht "76198 Beiträge wurden zur Neuberechnung markiert", dachte ich, dass sie jetzt einfach neu berechnet werden müssen, also ging ich zu Sidekiq, aber es steht nichts zur Bearbeitung an :(


Seufz. Verwenden Sie denselben Hostnamen? (Vielleicht ja?)
Das ist jetzt Ihr Problem.
Haben Sie S3 in der Datenbank oder in der YML-Datei konfiguriert? Ich vermute, es ist ersteres. Am einfachsten wäre es, nur eine Datenbank wiederherzustellen, aber das ist schwer zu erklären (die SQL-Datei extrahieren und dann denselben Namen wie die tar.gz-Datei geben).
Sie können Folgendes versuchen:
discourse restore --pause <backup_filename>
Dadurch wird pausiert, bevor versucht wird, die S3-Sachen wiederherzustellen. Dann könnten Sie, wenn Sie wüssten, was zu tun ist, das Problem mit den fehlerhaften Uploads beheben.
Eine andere Möglichkeit wäre, DISCOURSE_USE_S3 in Ihrer app.yml auf false zu setzen. Möglicherweise müssen Sie auch die anderen S3-Einstellungen festlegen, wie z. B. diejenigen, die die Verwendung von S3-Uploads und/oder die S3-Buckets angeben.
[Zitat=“pfaffman, Beitrag:12, Thema:369694”]
Seufz. Verwenden Sie denselben Hostnamen? (Vielleicht?)
[/Zitat]
Ja, aber jetzt, wo Sie es erwähnen.
Das Forum ist jetzt 10 Jahre alt.
Ich habe S3 damals für eine Weile eingerichtet, es dann aber wieder entfernt, sodass diese Beiträge mit S3-Bildern schon recht alt sind.
Gibt es eine Möglichkeit, diese zu identifizieren und zu ignorieren/entfernen, sodass der Import reibungslos funktioniert?
Eine andere Möglichkeit wäre, DISCOURSE_USE_S3 in Ihrer app.yml auf false zu setzen. Möglicherweise müssen Sie auch die anderen S3-Einstellungen vornehmen, wie z. B. diejenigen, die besagen, dass S3-Uploads und/oder die S3-Buckets verwendet werden sollen.
Ich werde das auch versuchen, denn letztendlich kümmern wir uns nicht um diese S3-Dateien oder -Beiträge, es ist nur so, dass ich noch nicht weiß, wie ich damit umgehen soll, um sie zu ignorieren.
Wenn sie dir wirklich egal sind, könntest du die Pausen-Sache machen und wenn es pausiert, ein anderes Terminal öffnen, in Rails gehen und so etwas machen wie:
bad=Upload.where("url like '%the-s3-url%'")
bad.destroy_all
Übrigens, wenn du immer noch feststeckst, verzweifelt bist und ein Budget hast, kannst du mich per E-Mail oder PM kontaktieren oder in Marketplace fragen.
Das hättest du mir gleich sagen sollen! Ich hätte von Anfang an gerne bezahlt! hehe
Es läuft jetzt.
Nachdem ich tonnenweise Dinge ausprobiert hatte, habe ich etwas gemacht, das kontraintuitiv war, aber jetzt funktioniert:
S3 in der neuen Instanz richtig eingerichtet (über das Admin-Panel)
Den Import mit dem –pause thing durchgeführt, aber im zweiten Schritt den Prozess einfach gestoppt. Ich erwartete, dass das Forum nicht funktionieren würde oder Probleme mit den Bildern auftreten würden, aber es läuft und alte Bilder werden ohne Probleme geladen.
Ich teste immer noch Dinge, vielleicht finde ich später etwas kaputt, aber im Moment, nach 12 Stunden Fehlersuche, nenne ich es vorerst einen Sieg.