I have a client for whom embedded youtube videos are missing. They appear in composer’s preview, but when the messages are saved, they disappear. They are working fine in try.discourse.org. I tried whitelisting youtu.be and changing the URL to a youtube.com url too. Neither solved the problem.
It seems that the problem was that recent Discourse updates have caused my DOI resolver plugin to muck things up. (I disabled a couple other things too, but it was definitely some plugin. . . )
Ho riscontrato anche io questo problema: si tratta di un ban temporaneo dell’IP (credo di 1 ora) e durante tale periodo tutti i onebox di YouTube falliscono per i post rigenerati.
Forse sarebbe opportuno implementare un meccanismo per prevenire più di x richieste a YouTube all’ora durante la rigenerazione?
Recentemente, dopo una serie di modifiche e aggiornamenti alla mia installazione di Discourse, mancano solo due cose. Una è l’impossibilità di ricostruire il contenitore dei dati, e sto cercando di capire come risolvere, ma l’altra è che tutti i onebox funzionano tranne quelli con URL di YouTube.
Dal server e dal contenitore posso eseguire CURL verso YouTube: come posso accertarmi che si tratti di un ban temporaneo dell’IP?
Modifica: Posso confermare che né la Ricostruzione (App) né la Ricottura influenzano questo problema.
Modifica 2: Cercando ho visto che @jomaxro ha commentato qui che cose come CloudFlare possono influenzare i Onebox… un CDN può influenzare un solo Onebox? Ho provato a metterlo in Modalità Sviluppo, ma non ci sono stati cambiamenti.
Modifica 3: Ho provato a rimuovere tutti i plugin. Nulla è cambiato. (Inoltre, non riesco a ricuocere poiché sembra che i processi si interrompano a vicenda).
Modifica 4: Ho provato il comando di @Overgrow e sì, effettivamente ho un problema
[1] pry(main)> posts = Post.where("raw like '%youtube%'").count
=> 72674
Sto avendo difficoltà ad eseguire i comandi di ricottura perché il mio contenitore mi restituisce questo:
Questo potrebbe funzionare per rigenerare gradualmente: Post.where("raw like '%youtube%'").where("cooked NOT LIKE '%lazyYT%'").update_all(baked_version: nil)
Innanzitutto, grazie mille per il tempo che hai dedicato ad aiutarmi, @riking.
Ho eseguito quel comando e ho ottenuto quello che presumo sia il numero di post mancanti: 22462. Sulla base dell’ultima parte del comando, è corretto assumere che venga eseguito in background?
Non è necessario utilizzare un’espressione regolare per cercare una stringa in un post. Una semplice ricerca di stringa troverà youtube (ad esempio) in modo adeguato. In questo esempio, ogni post contenente la stringa youtube verrà rigenerato, uno ogni 100 secondi (molto lento…)
Sono passati circa 100 secondi:
Lascio che continui, ipotizzando che tra 76.200 secondi, più o meno, questo task rake sarà completato
Forse avrei dovuto impostare questo esempio con un ritardo di 10 secondi
Volevo dire che l’ho eseguito su un piccolo campione e poi l’ho rieseguito, ma il numero non è cambiato.
Cioè: ho eseguito il comando e avevo 76.000 post, ne ha elaborati 200, poi si è fermato e l’ho eseguito di nuovo, e il nuovo numero era 76.200 (sì, forse i miei utenti hanno aggiunto 400 post con YouTube… ma… non lo so).
Ora lo sto rieseguendo solo per vedere come va, ma ci vorranno alcuni giorni (76.500 accessi…)
Dato che nessun altro ha questo problema, sto cercando di pensare alle mie variabili e sostanzialmente:
Ho cambiato macchina (quindi potrebbe essere un limite di velocità di YouTube?)
Ho ripristinato un backup di Discourse su una nuova installazione (questo non dovrebbe essere correlato, ma a questo punto scommetto su tutto ciò che si muove)
Installazione con due container (Pensavo di avere un problema con la ricostruzione dei dati, ma grazie a queste informazioni da @Falco ora so che è “normale”).
Ho messo CloudFlare sopra seguendo i tutorial CDN presenti qui.
root@cont-web-only:/var/www/discourse# time rake posts:rebake_match['youtube',string]
76597 / 76594 (100.0%)-
76597 post elaborati!
Poi ho pensato: “beh, ovvio, devi aggiungere il timer, altrimenti non possiamo testare la ‘Teoria del limite di velocità’”, quindi ho provato quello che hai pubblicato tu:
root@cont-web-only:/var/www/discourse# time rake posts:rebake_match['youtube',string,100]
216 / 76594 (0.2%)-
L’ho interrotto proprio per verificare se ci fossero cambiamenti. A quanto pare niente, quindi ho pensato: “ok, lasciami eseguirlo di nuovo e vediamo come va”:
root@cont-web-only:/var/www/discourse# time rake posts:rebake_match['youtube',string,100]
116 / 76598 (0.2%)-
È in esecuzione in questo momento. Quindi il mio ragionamento era che il numero totale di post non era diminuito con l’altro rebake. (Potrei sbagliarmi, e probabilmente è così, con questa logica).