Une erreur s’est produite lors du chargement de ./plugins/poll/spec/integration/poll_endpoints_spec.rb.
Échec de l’exécution : raise ArgumentError.new(“No setting named ‘#{name}’ exists”)
Qu’est-ce que je fais de mal en essayant d’exécuter les tests du plugin poll ? Pourquoi ce paramètre spécifique ne serait-il pas chargé dans la locale par défaut ?
Pour exécuter uniquement les tests de poll, la commande est : bundle exec rake "plugin:spec[poll]" (ou plus court : bin/rake "plugin:spec[poll]"), sinon vous exécutez tous les tests des plugins.
Concernant l’erreur que vous rencontrez, je ne suis pas certain. La base de données de test a-t-elle été migrée ? (bin/rails db:migrate RAILS_ENV=test)
Merci. Comme vous l’avez dit, cela a bien exécuté tous les tests des plugins, ce que j’ai contourné en supprimant les autres plugins. Je me basais sur cette discussion, mais il s’avère que les parenthèses étaient mal placées.
Oui, la base de données est migrée dans l’environnement de test. J’ai contourné cette erreur en commentant la ligne raise ArgumentError.new("No setting named '#{name}' exists") et en la remplaçant par un puts, et cela montre que seul discourse_narrative_bot_enabled déclenche cette erreur ; tous les autres paramètres sont corrects. Je ne pense pas que nous ayons fait quoi que ce soit avec ce paramètre. Quoi qu’il en soit, comme mon test s’est exécuté correctement en ignorant cette erreur, je peux laisser cette solution de contournement dans mon Discourse local. Quand je découvrirai la véritable cause, je mettrai à jour ce message.
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 ?