No estás equivocado. Solo estás intentando resolver un problema; quizás te sientas frustrado porque tus incrustaciones de YouTube no funcionan…
Cuando ejecutas esto:
# time rake posts:rebake_match['youtube',string,100]
116 / 76598 (0.2%)-
Como el retraso está configurado en 100, solo se volverá a hornear un mensaje cada 100 segundos. Tienes casi 77 mil mensajes que volver a hornear (usando este patrón), lo que tomaría unos 90 días. Cuando usé 100, fue solo como ejemplo, no como recomendación; disculpa si te confundí
Incluso si cambias el retraso a 10 segundos, el proceso de volver a hornear tomará unos 9 días.
¿A qué velocidad quieres volver a hornear realmente tus “pasteles de YouTube”?
Eso es una gran pista; y ahora sabemos que incluso volver a generar un solo post con la tarea rake no resuelve tu problema (también confirmamos que la reconstrucción HTML desde la interfaz no funciona, como sugirió @Overgrow), que es lo que intentabas decirnos antes.
Gracias por el seguimiento paso a paso.
Déjame pensarlo un momento; y mientras tanto, quizás otros tengan algunas ideas ahora que el problema se está volviendo más claro.
Publica aquí uno de tus enlaces de YT (que no se resuelven) (quizás donde agregaste el texto ‘icemanworkingonthisheadache’) y confirmemos que la tarjeta de vista previa funcione aquí (y yo también lo probaré en uno de mis sitios de prueba).
Una cosa que puedes probar es iniciar sesión en Google y visitar el sitio de YouTube mientras estás conectado a través de tu servidor proxy, y ver si te muestra algún mensaje de error “interesante”.
Bueno, si no puedes hacer que onebox funcione en el editor para publicaciones recién agregadas, no tiene sentido volver a generar las publicaciones antiguas.
Primero necesitas hacer que onebox funcione para las nuevas publicaciones (al menos que se muestre correctamente en el panel de vista previa).
Y por cierto… la reconstrucción de HTML desde la interfaz de usuario equivale a volver a generar.
Así que, tras una semana de penitencia, logré cierto progreso, pero finalmente me topé con un muro.
Todos los detalles mencionados anteriormente siguen vigentes.
Después de hacer un esfuerzo extraordinario en la depuración, resultó que el problema era el siguiente: Al crear el nuevo Droplet, aproveché para actualizar algunas cosas que no pude hacer entonces con el original. Una de ellas fue IPv6. Resulta que los rangos de IPv6 de Digital Ocean están mayoritariamente bloqueados por Google por alguna razón cósmica. Así que, un consejo para el futuro: si estás configurando una instalación de Discourse en DO, no actives IPv6, porque no podrás eliminarlo más tarde; tendrás que cambiar de Droplet.
Tras corregir eso, todo funcionó como se esperaba. Sin embargo, debido al crecimiento normal (y a algunas tácticas recientes de Alphabet), he vuelto a la casilla de salida porque ahora recibo este error y no conozco ninguna forma de “detener” a Discourse para que no procese los oneboxes (incluso intenté añadir el dominio de YT a la lista negra, sin éxito). Esto se debe a que, según ese post que enlazo, “debería desaparecer después de una hora”, pero no puedo congelar mis rebakes… ¿o sí puedo? ¿Debería? Las otras opciones dependen de cambiar cosas en el lado del servidor, lo que implicaría… añadir más IPs? ¿Forzar “X-Forwarded-For” en las llamadas de Onebox?
Además, una pregunta adicional: ¿Por qué Discourse “asume la carga” de llamar a YT? Quiero decir, este error sugiere que es la IP del servidor la que está siendo señalada por realizar todas las llamadas (sí, es por la expansión de onebox), pero… ¿por qué no recae esto sobre el usuario que carga la página? ¿Rendimiento?
Como una solución temporal, he probado este CSS (no elegante) para ti y parece funcionar para detener el onebox (del procesamiento); como una especie de enfoque de “golpear una mosca con un martillo”, que podrías activar y desactivar (agregar y quitar) hasta que encuentres algo mejor. Pruébalo y dime:
.onebox-body{
display:none;
}
Espero que esto ayude.
Nota:
Probé esto en algunos enlaces onebox y el onebox(es) desapareció y el enlace permaneció; pero no lo probé en detalle, lo siento.
Simplemente detén el procesamiento actual. ¿Sabes qué desencadenó la regeneración que se está ejecutando? ¿Es un trabajo en segundo plano? Si es así, simplemente reduce la configuración de ‘número de publicaciones antiguas a regenerar’ a cero.
Luego puedes usar la regeneración de publicaciones de YouTube seleccionadas (que coincidan con una expresión regular) con retrasos..
Recientemente aprendí (gracias a ustedes) cómo realizar rebakes personalizados, hacer consultas y usar magia oscura. Sin embargo, ¿puedo preguntar cómo puedo saber o consultar esto:
Es decir… ¿eso se hace en la consola de Ruby o matando algo en Sidekiq…?
Sin embargo, no puedo establecerlo en cero. La interfaz indica que el valor debe estar entre 1 y 2000000000. Así que supongo que lo estableceré en 1 y lo combinaré con tu truco… eso debería permitirme ver si se levanta la prohibición.
(Porque las otras opciones son mucho más pesadas, al ser nuevas IPs, balanceadores de carga o forzar directamente X-Forwarded-For en todo, y no quiero estropear el funcionamiento de Discourse )
Por si acaso… Si necesitas configurarlo en cero, lo más probable es que puedas hacerlo mediante una consulta de actualización directa en la base de datos (o en Rails, sobre lo cual no puedo opinar con conocimiento).
Bueno, no hubo suerte. Lo dejé con el valor 1 y el truco para no mostrar nada, y el baneo sigue activo 5 horas después. ¿Lo peor? Obviamente no hay forma de contactarlos, así que solo estoy adivinando formas de solucionarlo.
Debes tener paciencia. En mi experiencia, puede tardar de 2 a 3 días en levantarse la prohibición. Solo asegúrate de que no haya más solicitudes a esa IP.
Puedes verificar si aún hay trabajos de rebake pendientes. La pista está en el código (esta línea selecciona las publicaciones que necesitan ser rebakeadas en segundo plano, limitadas por la configuración rebake old posts count):
Estás buscando las siguientes publicaciones:
WHERE (((baked_version IS NULL) OR (baked_version < 2)) AND (deleted_at IS NULL))