Los GitHub Actions fallan en el paso "Check SKIP_DB_AND_REDIS bootability"

Tuve un problema donde el paso recientemente agregado “Comprobar la capacidad de arranque de SKIP_DB_AND_REDIS” falló en uno de mis plugins.

El arranque de SKIP_DB_AND_REDIS falló. Asegúrate de que la base de datos no se esté accediendo durante el proceso de arranque de Rails.

Para reproducirlo localmente, ejecuta `SKIP_DB_AND_REDIS=1 RAILS_DB=‘nonexistent’ bin/rails runner “puts ‘arrancó con éxito’”`.

Lo intenté, pero no pude reproducir el problema localmente. Simplemente pasó.

Podría usar la traza de pila del paso fallido de la acción de GitHub para identificar exactamente qué código era el culpable.

El código problemático

En uno de mis controladores declaré una constante que recuperaba la lista de atributos de un registro activo:

REWARD_FIELDS =  Reward.attribute_names.excluding("id", "created_at", "updated_at")

Lo cual, al parecer, no deberías hacer.

Pero habría sido más agradable si hubiera podido simular esta comprobación localmente, para no tener que hacer ensayo y error a través de las acciones de GitHub. Debe haber algo más además de ejecutar:

SKIP_DB_AND_REDIS=1 RAILS_DB='nonexistent' bin/rails runner "puts 'arrancó con éxito'"

Interesante, ¡gracias por reportarlo!

Eso es algo bastante específico, que probablemente no habíamos considerado antes.

¿Podrías intentar cambiar esta línea a false en tu instalación local:

¿Y luego intentar de nuevo el comando de reproducción?

Si eso reproduce correctamente el problema, entonces deberíamos considerar agregar una variable de entorno para controlar esa configuración de schema_cache_dump.

Eso no tuvo ningún efecto. Tampoco lo tuvo eliminar el archivo db/schema_cache.yml.

Por favor, ¿podrías probar estas dos opciones:

Modo de desarrollo, usando una variable de entorno diferente para configurar la base de datos:

SKIP_DB_AND_REDIS=1 DISCOURSE_DEV_DB='nonexistent' bin/rails runner "puts 'booted successfully'"

En modo de prueba, con los plugins cargados:

LOAD_PLUGINS=1 RAILS_ENV=test SKIP_DB_AND_REDIS=1 RAILS_DB='nonexistent' bin/rails runner "puts 'booted successfully'"

No, sigue siendo exitoso.

Solo para verificar que el código del plugin se cargó, usé puts DiscourseKofi::Engine.to_s y mostró el nombre. Pero cuando referencié la clase que crearía una conexión a la base de datos puts DiscourseKofi::Admin::AccountsController.to_s, finalmente falló.

Parece que no carga completamente el código del plugin localmente como lo hace en la acción de GitHub.

El comando fallido completo:

LOAD_PLUGINS=1 SKIP_DB_AND_REDIS=1 DISCOURSE_DEV_DB=nonexistent bin/rails runner "puts DiscourseKofi::Admin::AccountsController.to_s"

Sin LOAD_PLUGINS=1 o usando RAILS_DB=nonexistent no resultó en un fallo.

Corrección: LOAD_PLUGINS no importó.

Así que esto fallará:

SKIP_DB_AND_REDIS=1 DISCOURSE_DEV_DB=nonexistent bin/rails runner "puts DiscourseKofi::Admin::AccountsController.to_s"
-> fallo

Esto no:

SKIP_DB_AND_REDIS=1 DISCOURSE_DEV_DB=nonexistent bin/rails runner "puts 'arrancó con éxito'"
-> sin fallo

Tampoco al referenciar una clase que no accedería a la base de datos:

SKIP_DB_AND_REDIS=1 DISCOURSE_DEV_DB=nonexistent bin/rails runner "puts DiscourseKofi::Admin::PaymentsController.to_s"
-> sin fallo

Entendido. El comando correcto para reproducir el problema localmente es:

CI=true RAILS_ENV=test LOAD_PLUGINS=1 SKIP_DB_AND_REDIS=1 RAILS_DB=nonexistent bin/rails runner "puts 'booted successfully'"

Todas esas variables de entorno son importantes. No pude hacerlo funcionar con RAILS_ENV=development. Sin CI=true y LOAD_PLUGINS=1 en modo test, parece que no se cargan todas las clases de los complementos.