Ações do GitHub falhando no passo "Check SKIP_DB_AND_REDIS bootability"

Tive um problema onde a etapa recentemente adicionada “Verificar bootabilidade de SKIP_DB_AND_REDIS” falhou para um dos meus plugins.

A inicialização de SKIP_DB_AND_REDIS falhou. Certifique-se de que o banco de dados não está sendo acessado durante o processo de inicialização do Rails.

Para reproduzir localmente, execute `SKIP_DB_AND_REDIS=1 RAILS_DB=‘nonexistent’ bin/rails runner “puts ‘booted successfully’”`.

Tentei isso, mas não consegui reproduzir o problema localmente. Simplesmente passou.

Poderia usar o rastreamento de pilha da etapa falha do GitHub Action para identificar qual código era o culpado.

O código problemático

Em um dos meus controladores, declarei uma constante que recuperava a lista de atributos de um Active Record:

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

O que, aparentemente, você não deve fazer.

Mas teria sido mais legal se eu pudesse simular essa verificação localmente, para não ter que fazer tentativa e erro via GitHub Actions. Então, deve haver algo além de executar:

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

Interessante, obrigado por reportar!

Isso é algo bastante específico, que provavelmente não havíamos considerado antes.

Você poderia tentar alterar essa linha para false na sua instalação local:

E então tentar o comando de reprodução novamente?

Se isso reproduzir com sucesso o problema, devemos verificar a adição de uma variável de ambiente (ENV) para controlar essa configuração de schema_cache_dump.

Isso não teve nenhum efeito. Nem tampouco a exclusão do arquivo db/schema_cache.yml.

Por favor, poderia tentar estas duas opções:

Modo de desenvolvimento, usando um ambiente diferente para configurar o banco de dados:

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

No modo de teste, com plugins carregados:

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

Não, ainda foi bem-sucedido.

Apenas para verificar se o código do plugin foi carregado, usei “puts DiscourseKofi::Engine.to_s” e ele imprimiu o nome. Mas, ao referenciar a classe que criaria uma conexão com o banco de dados “puts DiscourseKofi::Admin::AccountsController.to_s”, finalmente falhou.

Parece, então, que ele não carrega completamente o código do plugin localmente, como faz na ação do GitHub.

O comando completo que falhou:

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

Sem LOAD_PLUGINS=1 ou usando RAILS_DB=nonexistent não resultou em falha.

Correção: LOAD_PLUGINS não fez diferença.

Então, isso falhará:

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

Isso não:

SKIP_DB_AND_REDIS=1 DISCOURSE_DEV_DB=nonexistent bin/rails runner "puts 'inicializado com sucesso'"
-> sem falha

Tampouco referenciar uma classe que não acessaria o banco de dados:

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

Entendi. O comando correto para reproduzir o problema localmente é:

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

Todas essas variáveis de ambiente são importantes. Não consegui fazer funcionar com RAILS_ENV=development. Sem CI=true e LOAD_PLUGINS=1 no modo test, parece que nem todas as classes de plugin são carregadas.