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.
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.
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…
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.
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.
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.
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?
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?
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.
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).
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.
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.
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!
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.