Ocorreu um erro ao carregar ./plugins/poll/spec/integration/poll_endpoints_spec.rb.
Erro na execução: raise ArgumentError.new(“No setting named ‘#{name}’ exists”)
O que estou fazendo de errado ao tentar executar os testes do plugin poll? Por que essa configuração específica não está sendo carregada no locale padrão?
Para executar apenas os testes do poll, o comando é: bundle exec rake "plugin:spec[poll]" (ou mais curto: bin/rake "plugin:spec[poll]"); caso contrário, você estará executando todos os testes dos plugins.
Sobre o erro que você está recebendo, não tenho certeza. O banco de dados de testes foi migrado? (bin/rails db:migrate RAILS_ENV=test)
Obrigado. Como você disse, ele executou todos os testes dos plugins, o que contornei removendo os outros plugins. Eu estava me baseando neste, mas acabou que os parênteses estavam no lugar errado.
Sim, o banco de dados foi migrado no ambiente de teste. Contornei esse erro comentando a linha raise ArgumentError.new("No setting named '#{name}' exists") e substituindo-a por um puts, e isso mostra que apenas discourse_narrative_bot_enabled dispara esse erro; todas as outras configurações estão corretas. Não acho que fizemos nada com essa configuração. De qualquer forma, como meu teste rodou corretamente ignorando esse erro, posso deixar a solução temporária no meu Discourse local. Quando descobrir o que realmente causou isso, atualizarei esta postagem.
Nosso CI funciona para PRs e commits, mas no job cron ele falha aqui toda vez.
Consigo reproduzir isso no console do Rails com um bloco semelhante:
[19] pry(main)> SiteSetting.defaults.tap do |s|
[19] pry(main)* s.set_regardless_of_locale(:discourse_narrative_bot_enab, false)
[19] pry(main)* end
ArgumentError: No setting named 'discourse_narrative_bot_enab' exists
Isso funciona se eu colocar:
[21] pry(main)> SiteSetting.defaults.tap do |s|
[21] pry(main)* if s.has_setting? :discourse_narrative_bot_enab
[21] pry(main)* s.set_regardless_of_locale(:discourse_narrative_bot_enab, false)
[21] pry(main)* end
[21] pry(main)* end
E só para verificar, falha com:
[21] pry(main)> SiteSetting.defaults.tap do |s|
[21] pry(main)* if s.has_setting? :discourse_narrative_bot_enabled
[21] pry(main)* s.set_regardless_of_locale(:discourse_narrative_bot_enab, false)
[21] pry(main)* end
[21] pry(main)* end
Então proponho a seguinte alteração em um PR, que ficarei feliz em submeter:
if ENV['LOAD_PLUGINS'] == '1' && s.has_setting? :discourse_narrative_bot_enabled
Por algum motivo, a presença do plugin narrativo não pode ser garantida?
Nesses exemplos, você tem a configuração do site como discourse_narrative_bot_enab, não discourse_narrative_bot_enabled. Imagino que, uma vez corrigido, não seja reproduzível?
A coisa mais surpreendente aqui é:
Isso sugere uma diferença no ambiente de execução para as execuções agendadas
Olhando para um dos logs de falha, parece que o GitHub está clonando o plugin multilíngue diretamente no diretório plugins, em vez de em seu próprio diretório. Então, ele está essencialmente ‘desinstalando’ todos os plugins principais (e falhando em instalar a si mesmo corretamente)
Olhando para a documentação, não parece haver uma maneira consistente de obter o nome do repositório (sem o proprietário), então precisaremos de alguns truques. Acho que isso deve funcionar:
cc @cvx - talvez devêssemos usar essa técnica no CI do template de plugin/tema?