Hemos estado animando a nuestros nuevos miembros a completar el tutorial de discobot y varios de ellos están encontrando un problema que ya habíamos experimentado en una instancia anterior (de staging) de Discourse: el certificado en el último post tarda mucho en generarse y aparecer, sin ninguna indicación de que se esté cargando o generando. Por mucho tiempo me refiero a un periodo de 10-20 segundos, suficiente para que alguien se rinda. Probé en meta y allí parece ser instantáneo.
Noté que el certificado se puede generar bajo demanda usando la URL /discobot/certificate.svg?date=Oct+28+2020&user_id=123, así que realicé algunas pruebas. Al principio fue instantáneo. Pero tan pronto como usé IDs de usuarios que no habían completado el tutorial recientemente, tuve que esperar el periodo de 10-20 segundos (una vez generado por primera vez es rápido, así que asumo que hay una caché en algún lugar). También obtuve algunos errores 500 durante el periodo de espera, lo cual asumo fue algún tipo de timeout, ya que funcionó en la siguiente actualización.
En /logs, veo una advertencia que no sé si está relacionada:
Failed to process hijacked response correctly : Net::ReadTimeout
traceback
/usr/local/lib/ruby/2.6.0/net/protocol.rb:217:in `rbuf_fill'
/usr/local/lib/ruby/2.6.0/net/protocol.rb:191:in `readuntil'
/usr/local/lib/ruby/2.6.0/net/protocol.rb:201:in `readline'
/usr/local/lib/ruby/2.6.0/net/http/response.rb:40:in `read_status_line'
/usr/local/lib/ruby/2.6.0/net/http/response.rb:29:in `read_new'
/usr/local/lib/ruby/2.6.0/net/http.rb:1509:in `block in transport_request'
/usr/local/lib/ruby/2.6.0/net/http.rb:1506:in `catch'
/usr/local/lib/ruby/2.6.0/net/http.rb:1506:in `transport_request'
/usr/local/lib/ruby/2.6.0/net/http.rb:1479:in `request'
rack-mini-profiler-2.0.2/lib/patches/net_patches.rb:9:in `block in request_with_mini_profiler'
rack-mini-profiler-2.0.2/lib/mini_profiler/profiling_methods.rb:39:in `step'
rack-mini-profiler-2.0.2/lib/patches/net_patches.rb:8:in `request_with_mini_profiler'
/var/www/discourse/lib/final_destination.rb:370:in `block in safe_get'
/var/www/discourse/lib/final_destination.rb:414:in `block in safe_session'
/usr/local/lib/ruby/2.6.0/net/http.rb:920:in `start'
/usr/local/lib/ruby/2.6.0/net/http.rb:605:in `start'
/var/www/discourse/lib/final_destination.rb:411:in `safe_session'
/var/www/discourse/lib/final_destination.rb:362:in `safe_get'
/var/www/discourse/lib/final_destination.rb:131:in `get'
/var/www/discourse/lib/final_destination.rb:152:in `get'
/var/www/discourse/lib/file_helper.rb:55:in `download'
/var/www/discourse/plugins/discourse-narrative-bot/plugin.rb:113:in `fetch_avatar'
/var/www/discourse/plugins/discourse-narrative-bot/plugin.rb:98:in `block in generate'
/var/www/discourse/lib/hijack.rb:56:in `instance_eval'
/var/www/discourse/lib/hijack.rb:56:in `block in hijack'
/var/www/discourse/lib/scheduler/defer.rb:94:in `block in do_work'
rails_multisite-2.3.0/lib/rails_multisite/connection_management.rb:68:in `with_connection'
/var/www/discourse/lib/scheduler/defer.rb:89:in `do_work'
/var/www/discourse/lib/scheduler/defer.rb:79:in `block (2 levels) in start_thread'
Entiendo que el certificado se genera localmente, sin solicitudes de red externas.
La máquina es t3a.medium (4 GB de memoria) y el foro no está particularmente activo (~0.4 de carga, todavía hay mucha memoria libre). Durante la espera para que se genere el certificado, el CPU no pareció cambiar en absoluto, así que eso no parece ser el cuello de botella.
No somos los únicos que experimentamos esto (no estoy seguro si esto está relacionado), pero no veo nada allí que pueda ayudar.
No estoy seguro si estoy en algo, pero si actualicé la URL del certificado varias veces, finalmente obtuve un error que me decía que me calmara. ¿Existe algún mecanismo de limitación de velocidad de URL que pueda estar interfiriendo aquí si muchas personas están generando certificados en esa misma ruta de URL? Posiblemente no, pero no tengo idea de por qué está ocurriendo esto. Cualquier pista será bienvenida.

