La ricostruzione fallisce sempre quando si esaurisce il limite giornaliero di MAXMIND

Ho appena provato una ricompilazione e è fallita in questo punto:

 - dist/javascripts/media-optimization-worker.js: 5.01 kB (1.74 kB gzipped)
 - dist/javascripts/pikaday/1.8.2/pikaday.js: 42.54 kB (9.67 kB gzipped)
 - dist/javascripts/squoosh/mozjpeg_enc.js: 39.03 kB (10.81 kB gzipped)
 - dist/javascripts/squoosh/squoosh_resize.js: 4.53 kB (1.28 kB gzipped)
Fatto 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 Mi Piace

Ho una domanda. Stai usando S3? Sospetto anche questo.

No :baymax_no: No S3 per me.

1 Mi Piace

Non so se questo accade solo quando il limite giornaliero è esaurito. Ma qui succede continuamente da 2-3 mesi. Anche altre persone sembrano avere lo stesso problema:

Forse sarebbe una buona idea fornire i file Maxmind da una directory locale? Li scarico comunque per altri usi, quindi sono già lì.

E forse sarebbe ancora meglio fornire i file Maxmind in una directory condivisa nel container Discourse per avere sempre la versione aggiornata? Come ho detto, li scarico comunque e aggiorno i file una volta al giorno.

1 Mi Piace

Penso che il problema non sia correlato al limite. In altre parole, restituisce un errore anche quando viene inserita una chiave o un ID account errato. Ecco come possiamo risolvere il problema qui: in caso di errore, farlo utilizzare il vecchio database e continuare a ricostruirlo. Naturalmente, è molto importante determinare la causa principale di questo problema.

Ho provato a creare un esempio due giorni fa e ha restituito un errore. Non aveva nulla a che fare con il limite perché era la mia prima ricostruzione quel giorno. Poi ho creato una nuova chiave e ho provato e ha funzionato. C’è una situazione qui: quando crei una chiave, ci vuole un po’ di tempo prima che diventi attiva. Se la ricrei immediatamente, restituisce un errore.

interessante :slight_smile:

Beh, le mie chiavi sono vecchie, non le ho mai cambiate dopo averle iniziate a usare. Perché funziona quando crei una nuova chiave? Hai detto che ci vuole un po’ prima che diventi attiva. Quindi dovrebbe dare un errore allora?

È una buona idea. O offrire i file da una directory locale, come ho suggerito. Tutto opzionale. Ma mi infastidisce davvero che la ricostruzione sia come una lotteria da molte settimane ormai…

1 Mi Piace

Questo è contrario ai termini di utilizzo di Maxmind, motivo per cui dobbiamo far sì che tutti forniscano le chiavi API per scaricare i file individualmente.

Assegnandomi il compito di esaminare qual è il problema quando viene raggiunto il limite giornaliero.

2 Mi Piace

Ho avuto un errore nella ricompilazione e poi ho creato l’immagine con le impostazioni maxmind disattivate. E poi, all’interno del container, ho riattivato le impostazioni ed eseguito correttamente il task rake.

Forse è possibile ricompilare senza scaricare il database e poi far scaricare il database all’avvio del container?

Inoltre, ho aggiunto una PR che dovrebbe consentire al bootstrap di avere successo (che è stata unita) anche se il download fallisce, ma sta ancora causando il fallimento del bootstrap.

2 Mi Piace

Sì, penso che tu abbia ragione. Maxmind non è una funzionalità critica, quindi non c’è bisogno che facciamo fallire il bootstrap quando non riusciamo a scaricare le cose.

6 Mi Piace

Penso che tu non abbia capito cosa stavo cercando di dire. Provo di nuovo:

Ho uno script che scarica i file Maxmind ogni pochi giorni. Con le mie chiavi API, ovviamente. I file vengono utilizzati sul server per diverse cose come le statistiche web di AWstats, i plugin di WordPress e così via.

Quindi ho comunque i file sulla macchina. Perché scaricare i file (di nuovo) quando ricostruisco il container Discourse?

È un’idea geniale. :slight_smile:

1 Mi Piace

Sì. Sarebbe fantastico poterli avere in uno storage persistente, specialmente se potesse essere condiviso tra istanze. Ho una manciata di siti Discourse sulla stessa macchina dietro traefik, quindi se potessero tutti condividere lo stesso mmdb, risparmierei la gestione e il download di un sacco di copie separate. Anche su un’installazione standard, potrebbero persistere tra le build. Forse è già possibile? Forse basta montare /var/www/discourse/vendor/data da qualche parte in modo persistente?

Aha. Penso che sia a questo che serve GlobalSetting.maxmind_backup_path. Quindi penso che se per qualche motivo hai un maxminddb, puoi impostare DISCOURSE_MAXMIND_BACKUP_PATH su qualcosa che sia disponibile nel container.

Inoltre, perché abbiamo bisogno di mmdb per precompilare gli asset?

2 Mi Piace

Quindi sta già funzionando? Impostare DISCOURSE_MAXMIND_BACKUP_PATH in app.yml (come link interno dal container o link assoluto sull’host Docker?) disabiliterà un download da Maxmind durante la ricostruzione?

È nel codice. Non l’ho mai usato. Sembra che se includi un percorso lì, lo troverà. Non ricordo, ma penso che sia un percorso della directory.

Okay, potrei provare. Ho diverse istanze e una è solo per il test.

Posso vedere se i file sono stati presi localmente o sono stati scaricati?

Quindi qualcosa come /var/discourse/maxmind sull’host Docker?

Mi dispiace. Non sono sicuro. Sembra che voglia una directory e puoi crearla come vuoi, quindi forse aggiungeresti un volume nel tuo app.yml come

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

e DISCOURSE_maxmind_backup_path=/data/mmdb (correggendo il case per la variabile d’ambiente)

ecco il codice

Grazie ancora. Ho creato /var/discourse/shared/discourse_test/data/mmdb e ecco cosa ho fatto ad app.yml:

  ## La chiave dell'account MaxMind per la geolocalizzazione IP per la ricerca dell'indirizzo IP
  ## vedi https://meta.discourse.org/t/-/137387/23 per i dettagli
  DISCOURSE_MAXMIND_ACCOUNT_ID: 123456
  DISCOURSE_MAXMIND_LICENSE_KEY: abcdefg
  DISCOURSE_MAXMIND_BACKUP_PATH: /data/mmdb

## Il container Docker è stateless; tutti i dati sono memorizzati in /shared
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

Ho aggiunto DISCOURSE_MAXMIND_BACKUP_PATH e ho aggiunto un terzo volume.

La directory per DISCOURSE_MAXMIND_BACKUP_PATH è corretta? Il percorso è il percorso all’interno del container?

Devo rimuovere DISCOURSE_MAXMIND_ACCOUNT_ID e DISCOURSE_MAXMIND_LICENSE_KEY ora?

Scusa, troppo eccitato e anche un po’ confuso. :wink:

Va beneeeee :smiley:

Rilevata copia di backup MaxMindDB (scaricata: 2024-07-17 23:15:02 +0000) in /data/mmdb
Copia di MaxMindDB da /data/mmdb a /var/www/discourse/vendor/data
Salta il download di MaxMindDB poiché è stato scaricato l'ultima volta il 2024-07-17 23:15:02 +0000

Penso che questo sia ciò che io (o meglio “noi”) volevamo vedere. :smiley:

3 Mi Piace

Penso che avresti potuto saltare il volume aggiuntivo e fare

DISCOURSE_MAXMIND_BACKUP_PATH: /shared/data

Ma se hai qualche altro processo che mantiene quel database aggiornato altrove, allora potresti montare quella directory in modo da avere una sola copia locale sul tuo disco e dovresti aggiornare solo quella copia.

2 Mi Piace

Penso che lo lascerò così. Ai miei occhi è una configurazione più chiara che può ancora essere compresa tra qualche mese. Inoltre, potrebbe essere più generica e adatta a più casi d’uso rispetto al solo mio.

Copio i tre file mmdb di Maxmind in quella directory quando li scarico. Ho appena modificato lo script che sto usando (a proposito, per il download sto usando geoipupdate, che è disponibile anche come pacchetto per Debian (e molto probabilmente altre distribuzioni Linux)).

Ho appena finito di ricostruire quattro diversi container Discourse, tutti senza errori! Non succedeva da mesi qui. Fantastico! :slight_smile:

3 Mi Piace

Questo problema persiste ancora. Spiegherò l’incidente in dettaglio:
Ho effettuato un aggiornamento dall’amministratore, si è interrotto a metà. Quindi ho avviato una ricompilazione dal pannello ssh. Boom ha dato un errore, un esempio di errore è sotto.

Quindi ho creato una nuova chiave maxmind e l’ho ricompilata, ha dato di nuovo un errore, lo stesso errore. (interessante, forse la chiave non era attiva).

Quindi ho disabilitato l’impostazione maxmind nel file app.yml. L’ho ricompilata e la compilazione è andata a buon fine.

I componenti aggiuntivi che ho utilizzato sono mostrati nell’immagine, altre cose che ho utilizzato:

  • Cloudflare R2
  • server postgresql separato
  • cloudflare

Non riesco più a capire cosa stia causando il problema.

1 Mi Piace