Problema caricamento Avatar (Ubuntu)

Questo è stato separato dalla discussione sull’impostazione dell’ambiente di sviluppo WSL su Windows 11.

I miei problemi riguardano un’installazione di sviluppo (non-docker) su ubuntu 22.04.3

…Grazie per questo, ho dovuto eseguire alcuni passaggi manuali aggiuntivi poiché l’installer modificato non sembrava installare le ultime versioni di npm o ruby

Utilizzo anche ubuntu-22.04

Installa l’ultima versione di npm usando (opzione 2): https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-22-04

Installa pnpm: npm install -g pnpm

Installa l’ultima versione di ruby (metodo 3): https://ubuntuhandbook.org/index.php/2024/01/install-ruby-ubuntu-24-04/

Aggiungi questo a bash.rc:

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

Installa imagemagick manualmente, l’ultima versione (assicurati di andare alla sezione “Install latest version of ImageMagick from the source code (for advanced and desperate users)”: https://itsfoss.com/install-imagemagick-ubuntu

Solo dopo tutto questo sono stato in grado di accedere all’istanza…

Dopo aver passato l’intera giornata a configurare l’istanza di sviluppo, ero piuttosto soddisfatto… tutto sembra a posto, tranne il caricamento degli avatar. Nello specifico, come utente posso caricare un avatar e nella casella di caricamento avatar viene visualizzato correttamente, ma quando clicco su salva viene visualizzato solo l’avatar segnaposto… nessun errore nel log…

Questo è piuttosto importante per me poiché ho configurato l’istanza di sviluppo per testare una migrazione e uno di quei test prevede che vengano importati gli avatar :smiley:… quindi voglio assicurarmi che funzionino prima di procedere con un’importazione di prova.

Le immagini caricate negli argomenti appaiono correttamente, nessun problema.

Qualcuno ha qualche idea? Qualsiasi aiuto è molto apprezzato.

Gli URL per le immagini possono essere un po’ complicati in locale.

Assicurati di avviare il tuo server locale con FORCE_HOSTNAME=localhost:4200 bin/ember-cli -u

È meglio usare un’istanza di test nel cloud per simulare la tua destinazione finale… infatti, ti consiglio di testare le migrazioni nel cloud in definitiva.

Ci ho provato, senza successo.

Sono così stanco dopo aver passato l’intera giornata a portare questo ambiente di sviluppo locale dove si trova, non riesco a convincermi che sia stato tutto inutile ora :stuck_out_tongue: pensavo di esserci quasi!

Il mio processo mentale per un ambiente di sviluppo locale era:

eseguire lo script di importazione localmente, eseguire il backup di Discord, metterlo sull’istanza di produzione cloud appropriata quando tutto sembra a posto…

puoi controllare gli URL degli avatar negli strumenti di sviluppo del browser e potresti scoprire che non sono corretti

le installazioni locali sono molto utili per lo sviluppo e i test… solo che non sono perfette per manipolare le immagini

Quello che probabilmente sta succedendo è che WSL non sta esponendo 127.0.0.1 a Windows, quindi un browser Windows non lo sta rilevando.

Prova invece a lanciare da Chrome all’interno di WSL2 e usarlo?

La mia ipotesi è che gli avatar vengano visualizzati con un indirizzo 127.0.0.1…

Ahh scusate, sto usando Ubuntu, su una VM Ubuntu. Non intendevo dirottare questa discussione su Win 11

Ecco il comportamento esatto.

Il caricamento di immagini nei post funziona correttamente.

La modifica dell’avatar utente sembra funzionare quando si carica l’immagine per la prima volta e si è ancora nella finestra di dialogo di selezione dell’immagine:

ma quando si fa clic su “Salva modifiche”, l’immagine caricata non viene visualizzata e viene mostrata quella predefinita:

L’immagine è stata caricata ed è possibile visualizzarla andando alla sorgente:

e se si modifica l’URL negli strumenti per sviluppatori, viene visualizzata correttamente nella pagina delle preferenze:

Quindi… la differenza è l’URL: l’avatar personalizzato caricato ha un “http://127.0.0.1:4200/uploads/default/original…” ma la pagina vuole visualizzare

“/user_avatar/127.0.0.1/user1/…”

… cosa mi sto perdendo?

nota: nei topic/post l’immagine viene visualizzata correttamente con l’URL: http://localhost:4200/uploads/default/original/……….ecc

Qualsiasi aiuto è apprezzato!

Ok, penso di starci arrivando, due problemi, riferirò quando funzionerà

Ok…

Primo problema: il percorso dell’avatar era l’indirizzo IP 127.0.0.1 mentre tutti gli altri URL erano localhost, questo potrebbe fare la differenza? L’ho comunque modificato, andando in rails c (dato che non sembrava acquisire i parametri dalla riga di comando per avviare Discourse (FORCE_HOST=localhost ecc.), erano vuoti in rails).

rails c
SiteSetting.force_hostname = "localhost"
SiteSetting.port = 4200
exit

Quindi i percorsi degli avatar erano localhost e non indirizzo IP dopo aver riavviato il sito. Tuttavia, gli avatar non funzionavano ancora.

Ulteriori indagini sui log non appena ho eseguito un’importazione di avatar:

tail -n 200 log/development.log

hanno rivelato:

convert: no decode delegate for this image format jpeg:/home/bob/discourse/public/uploads/default/original/1X/92bb0d46e6a4b8a1333505b9d2da59a5ed1721ec.jpeg[0]' @ error/constitute.c/ReadImage/752.\nconvert: no images defined jpeg:/tmp/discourse-thumbnail20260202-4096-qjyo93.jpeg' @ error/deprecate.c/ConvertImageCommand/3368.\n"

e dopo qualche ricerca ho scoperto che era perché avevo installato Imagemagick ma non prima i delegati jpeg. Ho disinstallato Imagemagick, installato i delegati jpeg (e altri):

sudo apt install -y libpng-dev libtiff-dev libwebp-dev libheif-dev liblcms2-dev zlib1g-dev libjpeg-turbo8 libjpeg-turbo8-dev

e poi ho reinstallato Imagemagick da sorgente:

./configure \
  --prefix=/usr/local \
  --with-modules \
  --disable-static \
  --with-quantum-depth=16 \
  --with-jpeg=yes \
  --with-png=yes \
  --with-tiff=yes \
  --with-webp=yes \
  --with-heic=yes \
  --with-lcms=yes

make -j"$(nproc)"
sudo make install
sudo ldconfig

ho riavviato il server di Discourse e gli avatar hanno funzionato all’istante :slight_smile:

Sono infastidito con me stesso per essermi fissato sui riferimenti URL ip/localhost invece di controllare le basi… ma eccoci qua, ho imparato parecchio negli ultimi due giorni e ora funziona :slight_smile: