Error de compilación: no se puede descargar la base de datos de geolocalización de MaxMind

¡Hola!
Instalé Discourse en una máquina DigitalOcean recién creada usando estas instrucciones hace dos días y todo funcionó bien.
Ayer intenté instalar la aplicación una vez más, en una nueva máquina DigitalOcean (Ubuntu 18.03, 1 GB). Las VPS son idénticas, pero esta vez no funcionó.

Ejecuté ./discourse-setup, respondí a las preguntas y esperé. Mi terminal se congeló en la línea #<Thread:0x00005621595f3360@/var/www/discourse/lib/tasks/assets.rake:215 run> terminated with exception (report_on_exception is true):. La única forma de liberar la terminal fue cerrar la conexión SSH y volver a conectarme.

Solo tengo conocimientos básicos de Linux.
Actualizar el sistema con apt-get no hizo ninguna diferencia.
Descubrí que el instalador se queda colgado en la tarea assets:precompile. La excepción se originó en /var/www/discourse/lib/tasks/assets.rake:227:in rescue in block (2 levels) in <top (required)>': undefined local variable or method 'name' for main:Object (NameError).
El proceso de configuración escribe datos binarios en la consola, por eso se congela. Al profundizar, me di cuenta de que ocurre un error 403, pero no puedo encontrar la URL de destino.

¿Alguien tiene algún consejo?

¿En qué plan estabas en cuanto a RAM/CPU?

  • 1 GB de RAM
  • 1 vCPU compartida de 2,3 GHz
  • 25 GB de SSD ROM

¿Puedes poner aquí el rastreo completo? Además, ¿tienes algún plugin personalizado?

Ejecuté setup en screen y grabé. Luego abrí el registro con xdd. Reemplacé dos fragmentos de datos binarios con <BINARY_DATA>

#<Thread:0x000055c07c7e8cf8@/var/www/discourse/lib/tasks/assets.rake:215 run> terminated with exception (report_on_exceptionis true):
/var/www/discourse/lib/tasks/assets.rake:227:in `rescue in block (2 levels) in <top (required)>':undefined local variable or method`name' for main:Object (NameError)
from /var/www/discourse/lib/tasks/assets.rake:216:in `block (2 levels) in <top (required)>' /var/www/discourse/lib/file_helper.rb:55:in `block in download':
403 Error:<BINARY_DATA> (OpenURI::HTTPError) <BINARY_DATA>
from /var/www/discourse/lib/final_destination.rb:400:in `block (3 levels) in safe_get'
from /var/www/discourse/lib/final_destination.rb:399:in `catch'
from /var/www/discourse/lib/final_destination.rb:399:in `block (2 levels) in safe_get'
from /usr/local/lib/ruby/2.6.0/net/http.rb:1518:in `block in transport_request'
from /usr/local/lib/ruby/2.6.0/net/http/response.rb:165:in `reading_body'
from /usr/local/lib/ruby/2.6.0/net/http.rb:1517:in `transport_request'
from /usr/local/lib/ruby/2.6.0/net/http.rb:1479:in `request'
from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.0.2/lib/patches/net_patches.rb:9:in `block in request_with_mini_profiler'
from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.0.2/lib/mini_profiler/profiling_methods.rb:39:in `step'
from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.0.2/lib/patches/net_patches.rb:8:in `request_with_mini_profiler'
from /var/www/discourse/lib/final_destination.rb:371:in `block in safe_get'
from /var/www/discourse/lib/final_destination.rb:415:in `block in safe_session'
from /usr/local/lib/ruby/2.6.0/net/http.rb:920:in `start'
from /usr/local/lib/ruby/2.6.0/net/http.rb:605:in `start'
from /var/www/discourse/lib/final_destination.rb:412:in `safe_session'
from /var/www/discourse/lib/final_destination.rb:363:in `safe_get'
from /var/www/discourse/lib/final_destination.rb:129:in `get'
from /var/www/discourse/lib/file_helper.rb:47:in `download'
from /var/www/discourse/lib/discourse_ip_info.rb:30:in `mmdb_download'
from /var/www/discourse/lib/tasks/assets.rake:218:in `block (3 levels) in <top (required)>'
from /var/www/discourse/lib/tasks/assets.rake:217:in `each'
from /var/www/discourse/lib/tasks/assets.rake:217:in `block (2 levels) in <top (required)>'

El instalador ejecutó algunas tareas sin problemas. Al final del proceso aparecen:

FAILED--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake assets:precompile'
failed with return #<Process::Status: pid 384 exit 1>
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'..exec
failed with the params {"cd"=>"$home", "hook"=>"assets_precompile",
"cmd"=>["su discourse -c 'bundle exec rake assets:precompile'"]}
f534324ceedf6b1a8a5cc89f38e1c12c2418fb69c71f93f21c0dd2f5ef51483d
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one
./discourse-doctor may help diagnose the problem.

El comando ./discourse-doctor no ayuda. Doctor detecta que la aplicación no se ejecuta, intenta reconstruirla y también se queda colgado.
No he instalado ningún plugin, porque nunca había ejecutado esta aplicación en esta máquina :frowning:

Tu dirección IP está bloqueada para descargar la base de datos MaxMind.

Edita el archivo app.yml y agrega, bajo la clave de entorno DISCOURSE_REFRESH_MAXMIND_DB_DURING_PRECOMPILE_DAYS: 365, y luego intenta una reconstrucción.

¡Eso funciona! :boom::fire::tada:
¡Muchas, muchas gracias! ¿Debo dejar esta línea en app.yml o eliminarla después de la primera llamada exitosa?

Fallará de nuevo en cuanto lo elimines, porque tu servidor no podrá descargar una base de datos más reciente.

Tenerlo configurado en 365 significa efectivamente que se actualizará cuando lancemos una nueva imagen base, lo cual ocurre dos veces al año.

Definitivamente deberíamos tener un error mejor aquí; ese error es completamente incomprensible.