Rebake con il comando rails o il task rake non funziona, ma la ricostruzione dell'HTML sì. Perché?

Ecco dove mi trovo:

Dopo aver provato a eseguire post.rebake!(invalidate_broken_images: true) su tutti i miei 40000 post che contengono la stringa [img], ha funzionato per molte immagini… Ma ben lungi dall’essere tutte, nonostante fossero ospitate sullo stesso servizio di hosting di immagini esterno.
Ad esempio, ho migliaia di link “funzionanti” di casimages (che puntano a immagini valide e mostrano le immagini nell’anteprima del composer in modifica), rotti nella versione “cotto” dei post, che sono stati correttamente visualizzati e caricati sul server grazie al mio script, ma ho anche molti altri in cui semplicemente non ha funzionato, e non so perché.

Post.where('raw LIKE ?', '%[img]%').find_each do |p|
    p.rebake!(invalidate_broken_images: true)
end

Ho anche link di immagini da altri hoster che sono stati caricati, e alcuni su cui non ha funzionato.
Non sono riuscito a vedere alcuna differenza tra questi post e i link delle immagini. Avevano tutti immagini funzionanti, e il fatto che utilizzassero lo stesso hoster di immagini mi ha lasciato perplesso.
Ho provato l’operazione più volte e i risultati sono stati incoerenti, indipendentemente dai servizi di hosting esterni… Alcune immagini sono state caricate, altre no. Sembrava casuale.
Mi ricorda un po’ il problema riscontrato da @Amethi: Some linked images not displaying/show as broken - #8 by Amethi dove ha funzionato solo su alcune immagini senza alcuna spiegazione.


:information_source: Parlerò solo di casimages qui, anche se il mio forum importato utilizzava vari altri hoster di immagini.

Quindi, ho pensato che forse casimages ha temporaneamente messo nella blacklist il mio IP se provavo a recuperare troppe immagini dai loro server. Questo potrebbe spiegare sia il fatto che non ha funzionato per tutte le immagini sia la casualità del successo del caricamento delle immagini dal mio server.
Ci sono stati anche casi in cui l’opzione Rebuild HTML ha funzionato - inizialmente solo -, le immagini venivano quindi visualizzate invece di mostrare un’icona di immagine rotta, sebbene fossero ancora ospitate sul loro servizio di hosting esterno, ma quando è stata attivata l’attività Sidekiq di pull delle immagini esterne, le immagini si sono rotte.
Lo stesso vale utilizzando script rail con rebake!(invalidate_broken_images: true)
:weary:

Quindi, sto attualmente provando un approccio più lento, in cui attendo 5 secondi tra ogni comando rail rebake!:

total = Post.where('lower(raw) LIKE ?', '%[img]https:%').count
i = 0
Post.where('raw LIKE ?', '%[img]https:%').find_each do |p|
    p.rebake!(invalidate_broken_images: true)
    print "#{i}/#{total}"
    print "\r"
    i +=1
    sleep(5)
end

Vedrò tra circa 60 ore se è andata meglio…

Vorrei capire i fondamenti del mio problema qui e perché un “normale” rebake non riesce a caricare un’immagine sul server (se non sono temporaneamente messo nella blacklist da casimages).

Nota che questa volta, il certificato del server di casimages sembra OK :smile:

Inoltre, non capisco cosa faccia realmente invalidate_broken_images. Non ho molta familiarità con il codice di Discourse.

Ho guardato il codice per vedere l’occorrenza di invalidate_broken_images e ho visto questi file:

Perché cerca specificamente la stringa <img>? I miei post provengono da un phpBB importato e la versione raw contiene solo il bbCode [img], non i tag <img>; quindi come potrebbe avere un effetto (e lo ha avuto, vedi il mio messaggio precedente) sui miei post? :thinking:

Inoltre, non capisco davvero la differenza tra questi due metodi (?):

Sembra indicare che rebake imposti gli argomenti predefiniti su false, e che rebake! imposti l’argomento predefinito su true.

Come sono correlate queste due cose (sono a conoscenza dello scopo del carattere ! in ruby, tra l’altro), e perché si trovano in file diversi?

Il mio obiettivo è solo capire perché le mie immagini esterne a volte vengono caricate, a volte no, e se posso trovare un modo affidabile per caricarle correttamente e automaticamente, anche se ciò implica caricare un’immagine ogni ora. :sweat_smile:
Sono quasi due settimane che ci lavoro e sta facendo impazzire me (e le persone per cui ho migrato il server). :woozy_face:

Inoltre, non c’è nulla nei log di Discourse, a parte diversi Sidekiq is consuming too much memory (using: 592.25M). Nota che sto lavorando su Ubuntu tramite WSL su Windows 10, ma intendo utilizzare una soluzione funzionante (se ne trovo una…) sul nostro VPS.

1 Mi Piace