Youtube embeds missing

Hola @Iceman

Sí, acabo de buscar en la base de datos y no pude encontrar ninguna tabla ni campo donde se guarde esa configuración (no estaba en la tabla site_settings)

En cuanto a tu comentario:

… y la prohibición sigue activa 5 horas después

No tengo conocimientos especializados sobre cómo Google gestiona estas “prohibiciones”, pero sospecho que, una vez que sus algoritmos activan una prohibición, puede llevar mucho más tiempo a Google para “levantarla” (días o incluso semanas).

Pero, por otro lado, tampoco tengo conocimientos sobre cómo funciona este proceso de prohibición, ni siquiera sé cuál es el “nombre oficial de este proceso de prohibición” de Google.

¿Tú sí?

¿Existe una página de soporte de Google donde hablen sobre esto? ¿Cuál es el nombre exacto del proceso de prohibición al que te refieres?

Definitivamente no existe una página de soporte donde Google explique exactamente cómo funciona su bloqueo de prevención de ataques DoS, o cualquier sistema relacionado.

Después de mucho sudor y lágrimas, creo que está resuelto.

Sin embargo, no estoy particularmente “orgulloso” de la solución, pero bueno, es Google; no van a hablar ni a explicarte nada, así que… conclusiones:

  • En primer lugar, una lección importante: No actives IPv6 en DigitalOcean si estás usando Discourse, porque su rango de IPv6 está bloqueado por YouTube.

  • Después de corregir el cambio a IPv6, debido al aumento del tráfico, independientemente del proveedor de hosting (cambié un par de veces, ¡qué viaje!), lo que sucedió después fue que YouTube bloqueaba por IP mi instalación de Discourse, debido a la cantidad de videos de YouTube publicados en el sitio y a cómo Discourse los carga.

  • Para verificar este bloqueo, necesitas usar tu servidor como proxy hacia otro con un navegador o simplemente hacer un curl y buscar esta línea: “Sorry for the interruption. We have been receiving a large volume of requests from your network.” (hay este tema como referencia).

  • Gracias a la ayuda de @riking, @neounix y @Overgrow, ejecuté una serie de comandos (que puedes leer arriba) para intentar detener, limitar o cambiar la frecuencia con la que se renderizan los incrustados de YouTube. Para la mayoría de los sitios, eso sería suficiente, pero nosotros tuvimos el drama adicional de haber sido migrados después de probar un par de proveedores, por lo que todos los posts anteriores necesitaban ser renderizados. De hecho, limitarlo a uno cada hora medio lo resolvió al principio. Pero supongo que mi comunidad realmente le encanta compartir videos, porque eso no duró mucho.

  • Obviamente, no hay retroalimentación ni ayuda de YouTube en este asunto, excepto un par de hilos en su foro con el error y todos los comentarios diciendo “sí, yo también tengo ese problema”, pero sin soluciones allí.

  • Dadas las circunstancias, recordando la lógica de los infomerciales de “¡Tiene que haber otra forma!”, opté por un enfoque “Rambo”: Compré otra dirección IP. Luego añadí un cron que cambia la dirección IP de salida cada hora. Problema resuelto.

Se espera que, si el sitio sigue creciendo y la gente sigue compartiendo ese amor por YouTube, pueda necesitar adquirir una tercera IP. Pero bueno, hasta que encuentre una manera correcta de hacer un “Discourse distribuido” en K8S o algo así, esto es lo mejor que se puede tener.

No es la solución más elegante, lo sé.

Una vez más, gracias por toda la ayuda (y sobre todo por la paciencia, porque sé que soy muy n00b con toda la combinación de Rails/Sidekiq/RubyConsole, pero estoy tratando de mejorar leyendo el código de Discourse).

¡Gracias!

¡Brillante!

Esa es una solución creativa, efectiva y de “pensamiento fuera de la caja”.

¡Felicidades por resolver tu rompecabezas con estilo y elegancia!

Siguiendo los consejos y recomendaciones, configuré un CDN de CloudFront para nuestro bucket de AWS S3 en nuestro Discourse hace unos días.

Añadí la URL del CDN de S3 en nuestro panel de control y, como era de esperar, ejecuté el comando de rebake en más de 200.000 publicaciones.

En ese momento no le di mucha importancia; todo funcionaba correctamente y el proceso hizo su magia durante las siguientes 12 horas aproximadamente.

Tenemos muchos, muchos videos incrustados en nuestro Discourse. Somos una comunidad de drones/UAV y la gente publica y comparte sus fotos y videos todo el día. Hay decenas de miles de videos de YouTube en nuestras publicaciones de Discourse.

Mirando hacia atrás… ¿verdad? Después de añadir la URL del CDN, probablemente solo debería haber rebakeado las publicaciones que coincidieran con un patrón *.jpg o similar :man_facepalming:t2: :cry:

Bueno, ¿qué ha pasado?

YouTube ha bloqueado la dirección IP de nuestro servidor :pensive:

Ya no podemos generar onebox para ningún enlace de YouTube; nuestra comunidad se encuentra con:

429 Demasiadas solicitudes

:pensive:

(Un simple curl o wget desde el propio servidor también devuelve lo mismo)

Obviamente, nos bloquearon en algún momento durante el rebake, ya que la mitad de las publicaciones existentes que tenían videos funcionando, ahora ya no los tienen :sob:

Asumo que este bloqueo es permanente, pero como bien sabrás, es imposible encontrar a alguien en YouTube con quien contactar y pedir disculpas.

Por si acaso fuera permanente, una pregunta para @Iceman: ¿podrías compartir los detalles de cómo obtuviste una segunda dirección IP en Digital Ocean y los cambios que realizaste para enrutar el tráfico de salida por esa IP, dejando el tráfico entrante en la IP existente?

Y una pregunta para todos: ¿alguien sabe si este bloqueo es probablemente solo temporal? :crossed_fingers:t2 ¿Y/o hay algo que pueda hacer para arreglar mis publicaciones de YouTube, que ahora están muy dañadas?

Para una comunidad tan centrada en los medios, esto es bastante desastroso para nosotros.

Es poco probable que sea permanente; probablemente desaparecerá con el tiempo.

Si alguien busca el mismo cambio, puede usar una Remapeo en lugar de rehacer, lo cual es casi instantáneo y no realiza solicitudes a ningún sitio.

Disculpa la tardanza en responder.

No puedo ayudarte con Digital Ocean; nos alejamos de ellos cuando su soporte para IPv6 era deficiente.

Sigo añadiendo más y más direcciones IP al “switch” que realiza solicitudes salientes a YouTube, rotando entre ellas para evitar ser baneado. Sin embargo, eventualmente se bloquean y se crea un callejón sin salida. Si estás “baneado” y esa IP sigue haciendo solicitudes, sigue siendo bloqueada. Necesitas estar entre 1 y 8 horas sin realizar solicitudes para que YouTube te “desbane”. Cuantos más usuarios tengas y más videos de YouTube publiquen, peor se vuelve la situación.

Gracias a la última actualización de los oneboxes, es más fácil detectarlo (porque puedes ver el error 429 dentro de Discourse en lugar de tener que buscarlo porque los videos no se muestran correctamente). Sin embargo, con mi limitado conocimiento, me pregunto si hay una mejor manera de manejar la incrustación de videos de YouTube. Porque cuando se reproduce el video, la solicitud proviene de la IP del cliente (supongo), pero cuando se muestra el video, es tu sitio el que realiza la solicitud por cada video.

Gracias @Iceman :+1:t2:

Esto es realmente útil de saber.

El viernes instalé el complemento Onebox Assistant y enruté todos los oneboxes a través del proxy de embed.rocks.

Hoy, en la consola del servidor, intenté un wget aleatorio de un video de YouTube.

Efectivamente, ¡ya nos han desbloqueado!

Esta tarde volví a desactivar Onebox Assistant y estamos obteniendo contenido directamente, sin problemas hasta ahora.

De no haberlo hecho, creo que tendrías razón y nunca nos habrían desbloqueado, ya que estaríamos golpeando YouTube cada hora más o menos, ya que la gente publica constantemente nuevos videos :grimacing:

Gracias de nuevo :smiley:

Gracias por la información adicional, @Iceman y @Richie. Este tema ha surgido con bastante frecuencia recientemente, así que cualquier dato extra sobre cómo YouTube maneja la limitación de velocidad es muy útil.

También queremos tranquilizar a todos: estas “prohibiciones” son automáticas en ambos sentidos. Si tienes paciencia y reduces la cantidad de solicitudes a YouTube que realiza tu sitio, deberías ser retirado de la lista de traviesos de Santa en unos pocos días. :santa_claus::page_with_curl:

Usé una variante de esto para procesar suavemente muchos mensajes. Una sugerencia de bajo riesgo y gran ahorro de tiempo, ¡gracias @riking!

Por cierto, usé esto para rastrear el progreso:

Post.where(baked_version: nil).count