Das Wiederaufbauen schlägt immer fehl, wenn das MAXMIND-Tageslimit erreicht ist

Ich habe gerade einen erneuten Build versucht und er ist an diesem Punkt fehlgeschlagen:

 - dist/javascripts/media-optimization-worker.js: 5.01 kB (1.74 kB komprimiert)
 - dist/javascripts/pikaday/1.8.2/pikaday.js: 42.54 kB (9.67 kB komprimiert)
 - dist/javascripts/squoosh/mozjpeg_enc.js: 39.03 kB (10.81 kB komprimiert)
 - dist/javascripts/squoosh/squoosh_resize.js: 4.53 kB (1.28 kB komprimiert)
Fertig in 355,08s.

I, [2024-07-08T07:59:42.015855 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'SKIP_EMBER_CLI_COMPILE=1 bundle exec rake themes:update assets:precompile'
Purging temp files
Bundling assets
I, [2024-07-08T07:59:57.247206 #1532]  INFO -- : Writing /var/www/discourse/public/assets/break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js
I, [2024-07-08T07:59:57.264957 #1532]  INFO -- : Writing /var/www/discourse/public/assets/service-worker-9764e1cd771b38dbe65a0d1e42d89cb2cb5f72b266ab7316e55d3371cb0ac870.js
I, [2024-07-08T07:59:57.271269 #1532]  INFO -- : Writing /var/www/discourse/public/assets/locales/i18n-3b40e842fd72b9bcc74ea83e094c823cd9ca535e4ecc5e78722e6f99d3656137.js
I, [2024-07-08T07:59:57.277082 #1532]  INFO -- : Writing /var/www/discourse/public/assets/scripts/discourse-test-listen-boot-9b14a0fc65c689577e6a428dcfd680205516fe211700a71c7adb5cbcf4df2cc5.js
I, [2024-07-08T07:59:59.103776 #1532]  INFO -- : Writing /var/www/discourse/public/assets/locales/ar-dfed7a58f30378bc60d7a2cc8d6347524f68b272ae012f0232604f730e442f91.js
I, [2024-07-08T08:00:00.112555 #1532]  INFO -- : Writing /var/www/discourse/public/assets/locales/be-e12ac4c99df2289f422efd371dd3da766754aecb1189ea763fe003376aca9028.js
rake aborted!
Zlib::BufError: buffer error (Zlib::BufError)
1 „Gefällt mir“

Ich habe eine Frage. Benutzen Sie S3? Das vermute ich auch.

Nein :baymax_no: Kein S3 für mich.

1 „Gefällt mir“

Ich weiß nicht, ob das nur passiert, wenn das Tageslimit erschöpft ist. Aber hier passiert das seit 2-3 Monaten ständig. Auch andere Leute scheinen das gleiche Problem zu haben:

Vielleicht wäre es eine gute Idee, die Maxmind-Dateien aus einem lokalen Verzeichnis bereitzustellen? Ich lade diese sowieso für andere Zwecke herunter, also sind sie bereits vorhanden.

Und vielleicht wäre es noch besser, die Maxmind-Dateien in einem gemeinsamen Verzeichnis im Discourse-Container bereitzustellen, um immer die aktuellste Version zu haben? Wie gesagt, ich lade sie sowieso herunter und aktualisiere die Dateien einmal täglich.

1 „Gefällt mir“

Ich glaube, das Problem hängt nicht mit dem Limit zusammen. Anders ausgedrückt, es gibt auch einen Fehler, wenn ein falscher Schlüssel oder eine falsche Konto-ID eingegeben wird. Hier ist, wie wir das Problem lösen können: Im Fehlerfall soll die alte Datenbank verwendet und mit dem Wiederaufbau fortgefahren werden. Natürlich ist es sehr wichtig, die Hauptursache dieses Problems zu ermitteln.

Ich habe vor zwei Tagen versucht, ein Beispiel zu erstellen, und es gab einen Fehler. Es hatte nichts mit dem Limit zu tun, da es mein erster Wiederaufbau an diesem Tag war. Dann habe ich einen neuen Schlüssel erstellt und es versucht, und es hat funktioniert. Hier gibt es eine Situation: Wenn Sie einen Schlüssel erstellen, dauert es eine Weile, bis er aktiv wird. Wenn Sie ihn sofort neu erstellen, gibt es einen Fehler.

Interessant :slight_smile:

Nun, meine Schlüssel sind alt, ich habe sie nie geändert, seit ich sie benutze. Warum funktioniert es, wenn du einen neuen Schlüssel erstellst? Du sagtest, es dauert eine Weile, bis er aktiv wird. Also sollte er dann einen Fehler ausgeben?

Das ist eine gute Idee. Oder die Dateien aus einem lokalen Verzeichnis anbieten, wie ich vorgeschlagen habe. Alles optional. Aber es ärgert mich wirklich, dass der Wiederaufbau seit vielen Wochen wie eine Lotterie ist…

1 „Gefällt mir“

Dies verstößt gegen die Nutzungsbedingungen von Maxmind, weshalb wir jeden dazu bringen müssen, die API-Schlüssel bereitzustellen, um die Dateien einzeln herunterzuladen.

Ich weise mir selbst zu, mir anzusehen, was das Problem ist, wenn das Tageslimit erreicht wurde.

2 „Gefällt mir“

Ich hatte den Neuaufbau fehlschlagen lassen und dann das Image mit deaktivierten MaxMind-Einstellungen erstellt. Und dann innerhalb des Containers die Einstellungen wieder hinzugefügt und die Rake-Aufgabe erfolgreich ausgeführt.

Vielleicht ist es möglich, ohne Herunterladen der Datenbank neu aufzubauen und dann die Datenbank beim Starten des Containers herunterladen zu lassen?

Außerdem habe ich einen PR hinzugefügt, der den Bootstrap auch dann erfolgreich machen sollte (der zusammengeführt wurde), wenn der Download fehlschlägt, aber er verursacht immer noch einen Bootstrap-Fehler.

2 „Gefällt mir“

Ja, ich denke, Sie haben hier Recht. Maxmind ist keine kritische Funktion, daher müssen wir den Bootstrap nicht fehlschlagen lassen, wenn wir keine Daten herunterladen können.

6 „Gefällt mir“

Ich glaube, Sie haben nicht verstanden, was ich sagen wollte. Lassen Sie es mich noch einmal versuchen:

Ich habe ein Skript, das die Maxmind-Dateien alle paar Tage herunterlädt. Natürlich mit meinen eigenen API-Schlüsseln. Die Dateien werden auf dem Server für verschiedene Dinge wie AWstats Webstatistiken, WordPress-Plugins usw. verwendet.

Ich habe die Dateien also sowieso auf der Maschine. Warum die Dateien (noch einmal) herunterladen, wenn ich den Discourse-Container neu erstelle?

Das ist eine brillante Idee. :slight_smile:

1 „Gefällt mir“

Ja. Es wäre großartig, diese in persistentem Speicher haben zu können, besonders wenn sie über Instanzen hinweg geteilt werden könnten. Ich habe eine Handvoll Discourse-Sites auf derselben Maschine hinter Traefik, also wenn sie alle dieselbe mmdb teilen könnten, würde das das Aufbewahren und Herunterladen vieler separater Kopien sparen. Selbst bei einer Standardinstallation könnten sie zwischen Builds bestehen bleiben. Vielleicht ist das schon möglich? Vielleicht einfach /var/www/discourse/vendor/data irgendwo persistent einhängen?

Aha. Ich glaube, dafür ist GlobalSetting.maxmind_backup_path da. Ich glaube also, wenn man aus irgendeinem Grund eine maxminddb hat, kann man DISCOURSE_MAXMIND_BACKUP_PATH auf etwas setzen, das im Container verfügbar ist.

Außerdem, warum brauchen wir mmdb, um Assets zu kompilieren?

2 „Gefällt mir“

Funktioniert das also schon? Verhindert die Einrichtung von DISCOURSE_MAXMIND_BACKUP_PATH in app.yml (als interner Link aus dem Container oder absoluter Link auf dem Docker-Host) einen Download von Maxmind während des Rebuilds?

Es ist im Code. Ich habe es noch nie benutzt. Es sieht so aus, als ob es es finden würde, wenn man dort einen Pfad einfügt. Ich kann mich nicht erinnern, aber ich glaube, es ist ein Pfad zum Verzeichnis.

Okay, ich könnte es versuchen. Ich habe mehrere Instanzen und eine ist nur zum Testen.

Kann ich sehen, ob die Dateien lokal genommen oder heruntergeladen wurden?

Also so etwas wie /var/discourse/maxmind auf dem Docker-Host?

Entschuldigung. Ich bin mir nicht ganz sicher. Es sieht so aus, als ob ein Verzeichnis benötigt wird, und Sie können es beliebig benennen. Vielleicht fügen Sie in Ihrer app.yml ein Volume hinzu, wie z. B.

  - volume:
      host: /data/
      guest: /data

und DISCOURSE_maxmind_backup_path=/data/mmdb (korrigierte Groß-/Kleinschreibung für die Umgebungsvariable).

Hier ist der Code:

Vielen Dank nochmals. Ich habe /var/discourse/shared/discourse_test/data/mmdb erstellt und hier ist, was ich mit app.yml gemacht habe:

  ## Der Maxmind Geolocation IP-Adressschlüssel für die IP-Adresssuche
  ## siehe https://meta.discourse.org/t/-/137387/23 für Details
  DISCOURSE_MAXMIND_ACCOUNT_ID: 123456
  DISCOURSE_MAXMIND_LICENSE_KEY: abcdefg
  DISCOURSE_MAXMIND_BACKUP_PATH: /data/mmdb

## Der Docker-Container ist zustandslos; alle Daten werden in /shared gespeichert
volumes:
  - volume:
      host: /var/discourse/shared/discourse_test
      guest: /shared
  - volume:
      host: /var/discourse/shared/discourse_test/log/var-log
      guest: /var/log
  - volume:
      host: /var/discourse/shared/discourse_test/data
      guest: /data

Ich habe DISCOURSE_MAXMIND_BACKUP_PATH hinzugefügt und ein drittes Volume hinzugefügt.

Ist das Verzeichnis für DISCOURSE_MAXMIND_BACKUP_PATH korrekt? Ist der Pfad der Pfad innerhalb des Containers?

Muss ich jetzt DISCOURSE_MAXMIND_ACCOUNT_ID und DISCOURSE_MAXMIND_LICENSE_KEY entfernen?

Entschuldigung, zu aufgeregt und auch etwas unklar. :wink:

Okayyyyyy :smiley:

MaxMindDB-Backup erkannt (heruntergeladen: 2024-07-17 23:15:02 +0000) unter /data/mmdb
Kopiere MaxMindDB von /data/mmdb nach /var/www/discourse/vendor/data
Lade MaxMindDB nicht herunter, da es zuletzt am 2024-07-17 23:15:02 +0000 heruntergeladen wurde

Ich glaube, das ist es, was ich (oder besser gesagt „wir“) sehen wollten. :smiley:

3 „Gefällt mir“

Ich denke, Sie hätten das zusätzliche Volume überspringen und Folgendes tun können:

DISCOURSE_MAXMIND_BACKUP_PATH: /shared/data

Aber wenn Sie einen anderen Prozess haben, der diese Datenbank woanders auf dem neuesten Stand hält, könnten Sie dieses Verzeichnis einbinden, sodass Sie nur eine lokale Kopie auf Ihrer Festplatte hätten und nur diese eine Kopie aktualisieren müssten.

2 „Gefällt mir“

Ich denke, ich lasse es so. In meinen Augen ist es eine klarere Konfiguration, die auch in ein paar Monaten noch verständlich ist. Außerdem ist sie möglicherweise generischer und für mehr Anwendungsfälle als nur meine geeignet.

Ich kopiere die drei mmdb-Dateien von Maxmind beim Herunterladen in dieses Verzeichnis. Ich habe nur das Skript angepasst, das ich verwende (übrigens verwende ich zum Herunterladen geoipupdate, das auch als Paket für Debian (und höchstwahrscheinlich andere Linux-Distributionen) verfügbar ist).

Habe gerade vier verschiedene Discourse-Container neu erstellt, alle ohne Fehler! Das ist hier seit Monaten nicht mehr passiert. Großartig! :slight_smile:

3 „Gefällt mir“

Dieses Problem besteht weiterhin. Ich werde den Vorfall im Detail erläutern:
Ich habe ein Update vom Administrator durchgeführt, es wurde auf halbem Weg gestoppt. Dann habe ich über das SSH-Panel eine Neukompilierung gestartet. Boom gab einen Fehler aus, ein Beispiel-Fehler ist unten aufgeführt.

Dann habe ich einen neuen Maxmind-Schlüssel erstellt und ihn neu kompiliert, er gab wieder einen Fehler aus, derselbe Fehler. (Interessant, vielleicht wurde der Schlüssel nicht aktiviert).

Dann habe ich die Maxmind-Einstellung in der Datei app.yml deaktiviert. Ich habe sie neu kompiliert und die Kompilierung war erfolgreich.

Die von mir verwendeten Add-ons sind im Bild dargestellt, andere Dinge, die ich verwendet habe:

  • Cloudflare R2
  • separater PostgreSQL-Server
  • Cloudflare

Ich kann nicht mehr herausfinden, was das Problem verursacht.

1 „Gefällt mir“