Youtube embeds missing

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.

The site is running v1.6.0.beta11 +141

Have you tried reaching YouTube from your client’s server?

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. . . )

Qualcuno ha riscontrato un problema durante la ricreazione dei post che restituisce 429 Too Many Requests per youtube.com?

[1] pry(main)> posts = Post.where("raw like '%youtube%'").count
=> 5237

:thinking:

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:

PG::UnableToSend: no connection to the server

PG::ConnectionBad: PQconsumeInput() SSL SYSCALL error: EOF detected

Devo fermare qualcosa?

Un approccio potrebbe essere semplicemente rifare il baking utilizzando una corrispondenza di pattern e impostare un ritardo.

Qualcosa del genere:

rake posts:rebake_match["%youtube%",regex,10]

?

Il mio problema principale è non riuscire ad eseguire il comando :sweat:

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?

Sì, c’è un’attività che viene eseguita ogni 15 minuti e che riprocessa i post definiti da SiteSetting.rebake_old_posts_count.

Solo una domanda: il numero non scende, indipendentemente da quanto tempo passa. C’è un modo per seguire o forzare quel lavoro?

Hmm, possibile che l’abbia combinata male :thinking: Qual è il risultato di questo? Post.where("raw like '%youtube%'").where("cooked LIKE '%lazyYT%'").count

Stato attuale:

Vecchio comando:

[2] pry(main)> Post.where("raw like '%youtube%'").where("cooked NOT LIKE '%lazyYT%'").update_all(baked_version: nil)
=> 23257

Nuovo comando:

[1] pry(main)> Post.where("raw like '%youtube%'").where("cooked LIKE '%lazyYT%'").count
=> 49458

Modifica: Dopo qualche tempo posso confermare che il secondo rimane statico (stesso valore), mentre il primo continua ad aumentare.

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…)

Screen Shot 2020-05-26 at 11.23.06 AM

Sono passati circa 100 secondi:

Screen Shot 2020-05-26 at 11.25.35 AM

Lascio che continui, ipotizzando che tra 76.200 secondi, più o meno, questo task rake sarà completato :slight_smile:

Forse avrei dovuto impostare questo esempio con un ritardo di 10 secondi :slight_smile:

Grazie mille @neounix

L’ho provato, ma purtroppo senza successo.

Sto iniziando a pensare che forse c’è qualcosa legato alla rete?

Mi dispiace @iceman,

Essendo un tipo un po’ nerd, non capisco cosa significhi “senza successo” :slight_smile: (non ci sono abbastanza dettagli tecnici)

Vuoi dire che quando esegui il comando rake ottieni un errore di Rails?

Se è così, pubblica l’errore completo di Rails.

Oppure, il task di Rails viene eseguito correttamente? In tal caso, quanti post sono stati rigenerati secondo il task rake?

Grazie.

Ad esempio, il mio piccolo task di rigenerazione (con un ritardo molto lento di 100 secondi) per questo argomento è in esecuzione da ore:

Screen Shot 2020-05-26 at 5.09.07 PM

Attualmente 209 su 762 totali…

Quali sono i numeri del tuo task di rigenerazione?

Scusate per le mie informazioni incomplete!

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 :stuck_out_tongue: (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.

Scusa se sono un po’ lento :slight_smile: intendi che stai eseguendo questo task rake?

rake posts:rebake_match['youtube',string,10]

È importante riportare esattamente cosa stai digitando e cosa vedi.

Qual è il task rake esatto e quali parametri stai utilizzando?

Quando esegui quel task rake, quali sono le prime righe di output quando il task inizia a rielaborare?

Per favore, pubblica i dettagli, gli screenshot, copia e incolla dalla tua riga di comando, ecc.

Scusa @neounix, hai assolutamente ragione.

Riformulo:

Ho eseguito questo comando:

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).