An error occurred while loading ./plugins/poll/spec/integration/poll_endpoints_spec.rb.
Failure/Error: raise ArgumentError.new(“No setting named ‘#{name}’ exists”)
To run just the poll specs the command is: bundle exec rake "plugin:spec[poll]" (or shorter: bin/rake "plugin:spec[poll]") otherwise you’re running all plugins specs.
Regarding the error you’re getting, I’m not sure. Is the test database migrated? (bin/rails db:migrate RAILS_ENV=test)
Thanks. Like you said, it did run all the plugin specs, which I worked around by removing the other plugins. I was basing off of this, but it turns out the parentheses were in the wrong spot.
Yes, the database is migrated in the test environment. I worked around this error by commenting out the raise ArgumentError.new("No setting named '#{name}' exists") line and replacing it with a puts, and it shows only discourse_narrative_bot_enabled triggers this error; all other settings are fine. I don’t think we did anything with this setting. Anyway, since my spec run properly while ignoring this error, I can leave the workaround in my local discourse. When I find what actually caused this, I’ll update this post.
Notre CI fonctionne pour les PR et les commits, mais lors de la tâche cron, elle échoue ici à chaque fois.
Je suis capable de reproduire cela sur la console Rails avec un bloc similaire :
[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
Cela fonctionne si je mets :
[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
Et juste pour vérifier, échoue avec :
[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
Je propose donc le changement suivant dans une PR que je serais heureux de soumettre :
if ENV['LOAD_PLUGINS'] == '1' && s.has_setting? :discourse_narrative_bot_enabled
Pour une raison quelconque, la présence du plugin narrative bot ne peut être garantie ?
Dans ces exemples, le paramètre du site est discourse_narrative_bot_enab et non discourse_narrative_bot_enabled. Je suppose qu’une fois corrigé, ce ne sera plus reproductible ?
La chose la plus surprenante ici est :
Cela suggère une différence dans l’environnement d’exécution pour les exécutions planifiées
En regardant l’un des logs d’échec, il semble que GitHub clone le plugin multilingue directement dans le répertoire plugins, plutôt que dans son propre répertoire. Il désinstalle donc essentiellement tous les plugins principaux (et ne parvient pas à s’installer correctement lui-même).
En regardant la documentation, il ne semble pas y avoir de moyen cohérent d’obtenir le nom du dépôt (sans le propriétaire), nous aurons donc besoin d’une astuce. Je pense que cela devrait suffire :
cc @cvx - peut-être devrions-nous utiliser cette technique dans la CI du modèle de plugin/thème ?