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

Ciao!

Sto cercando di riparare post con immagini non funzionanti, importati e contenenti BBcode.

Le immagini vengono visualizzate nelle anteprime dell’editor, ma il contenuto finale del post contiene immagini non funzionanti:

Dopo aver utilizzato la funzione “rebuild HTML” su alcuni post e aver visto che ha riparato il post sul mio forum di produzione, ho rieseguito il rebake di tutti i miei post utilizzando il task rake.

Sono rimasto sorpreso nel vedere che i post con l’immagine non funzionante NON sono stati riparati.

Quindi ho sperimentato un rebake su un post specifico sul mio forum di test (stesso backup; stessi dati) sia con il comando rails che con il task rake, ed ecco il comportamento:

  • Le immagini vengono visualizzate per un secondo, ma il post torna rapidamente al suo stato iniziale con immagini non funzionanti.

Tuttavia, se utilizzo la funzione “rebuild HTML”, funziona perfettamente e le immagini non tornano a essere non funzionanti. Vengono persino caricate correttamente sul server dopo qualche minuto.

Quindi, qualcuno può spiegare questo fenomeno? Perché il rebake da rails o da un task rake ha questo comportamento e quali sono le differenze tra rebuilding HTML e un rebake da riga di comando?

Catture video:

  1. dalla console rails:

  2. dal task rake:

Sono molto incuriosito (e sto ancora cercando di riparare le mie immagini in tutti i miei post in batch).


Un esempio in cui ho utilizzato Rebuild HTML che mostra che le immagini incorporate di questo post sono state visualizzate correttamente e caricate automaticamente sul server (ovviamente, il loro link originale, che porta a casimages, è ancora presente, ma questo è il comportamento previsto), giorni fa: Frensh Vw Bus CHERIZET 2019 SK - #13 par buggyderby - Vos sorties - VW Camper

4 Mi Piace

Penso che il rake task li contrassegni per il rebake e attivi anche la ricostruzione delle miniature. Hai controllato sidekiq per vedere se ci sono elementi in coda?

3 Mi Piace

modifica:

Un’attività di rebake rake sul post attiva un PullHotLinkedImages in 4 minuti e aumenta anche istantaneamente il numero di attività elaborate di uno, ma non ho visto nulla aggiunto alla scheda della coda.
I pochi post su cui ho eseguito una ricostruzione manuale dell’HTML hanno visualizzato perfettamente le loro immagini per giorni (sono state scaricate anche sul mio server).

4 Mi Piace

<sTemo di non sapere perché funzioni diversamente dalla chiave inglese dell’amministratore rispetto alla console, ma ho trovato questo argomento con un problema simile e sono riusciti a farlo funzionare ribattendo tramite l’API:

https://meta.discourse.org/t/some-linked-images-not-displaying-show-as-broken/142177/7

<sNon sono sicuro se possa essere utile, ma ho pensato di condividerlo.:slightly_smiling_face:

Modifica: Avrei dovuto leggere un post più avanti. A quanto pare anche quello è inaffidabile. Mi dispiace, colpa mia. Falso allarme.

3 Mi Piace

10 post sono stati divisi in un nuovo argomento: Cannot PullHotlinkedImages for some domains

Oltre a Jay, che ha intravisto una possibile differenza tra rebake/rails rebake e rebuild HTML, qualcun altro ha un’idea?

Una risposta ufficiale sulla differenza (o le differenze) tra questi task sarebbe gradita :slight_smile:

Se non riusciamo a capirlo, inizierò la via API per “ricostruire l’HTML” dei miei 40000 post contenenti potenziali problemi con le immagini… E spero che funzioni per me :confused: :person_shrugging:

O se c’è un altro modo per “ricostruire l’HTML” usando rails, forse? :thinking:

Rebuild HTML: post.rebake!(invalidate_oneboxes: true, invalidate_broken_images: true)

Rake posts:rebake: post.rebake!(**opts) dove opts è generalmente vuoto
Per i Onebox puoi provare il task posts:refresh_oneboxes e per le immagini non valide puoi provare il task posts:invalidate_broken_images. Quest’ultimo potrebbe essere la soluzione al tuo problema.

8 Mi Piace

Dopo un test su alcuni post, sembra che funzioni a meraviglia!
Proverò su migliaia di post e vedrò come va! Grazie mille!

5 Mi Piace

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

È più in basso dove vedi cosa fa alla riga 716. Elimina quelle immagini in modo che ci riprovi a scaricarle. (a prima vista, comunque)

1 Mi Piace

Grazie per questa spiegazione. :slight_smile:


Quindi, sono quasi alle mie 55 ore di rifacimento dei miei post contenenti [img] con un ritardo di 5 secondi tra ogni iterazione dei miei 40000 post dal mio script rails.

Da quello che vedo, funziona molto meglio di prima. La maggior parte delle immagini valide (escludo Imageshack e il suo comportamento erratico) sembra essere caricata sul mio forum senza intoppi almeno a prima vista, ma darò un’occhiata più approfondita per essere sicuro al 100%. Ciò che è sicuro al 100% è che i risultati sono molto, molto migliori e coerenti.

Quindi sospetto che il problema che ho riscontrato (e forse il problema di @Amethi) che era la casualità nel download di immagini remote con invalidate_broken_images fosse correlato a una sorta di limite di frequenza da vari provider di hosting di immagini…? :thinking: La cosa strana è che non ho notato alcun problema con i miei altri forum importati… :face_with_raised_eyebrow:


Detto questo, se i risultati sono sufficientemente soddisfacenti e il ritardo migliora davvero il download di immagini remote, userò lo stesso metodo sul mio forum di produzione, ma aumenterò il tempo tra ogni post rifatto da 5 secondi a 10 o 15 secondi (o anche di più, non abbiamo fretta, questi sono tutti post piuttosto vecchi e il VPS ha specifiche molto inferiori rispetto al mio computer).

Non voglio essere troppo frettoloso nel trarre conclusioni, ma la soluzione al mio problema iniziale potrebbe essere quella di applicare sia la soluzione proposta da Richard SIA aggiungere un ritardo tra ogni rifacimento di post.

3 Mi Piace

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.