Si è verificato un errore durante il caricamento di ./plugins/poll/spec/integration/poll_endpoints_spec.rb.
Errore di esecuzione: raise ArgumentError.new(“No setting named ‘#{name}’ exists”)
Cosa sto sbagliando nel tentativo di eseguire i test del plugin poll? Perché questa specifica impostazione non viene caricata nella locale predefinita?
Per eseguire solo gli spec del poll, il comando è: bundle exec rake "plugin:spec[poll]" (o in forma abbreviata: bin/rake "plugin:spec[poll]"), altrimenti vengono eseguiti tutti gli spec dei plugin.
Per quanto riguarda l’errore che stai riscontrando, non sono sicuro. Il database di test è stato migrato? (bin/rails db:migrate RAILS_ENV=test)
Grazie. Come hai detto, ha eseguito tutti gli spec dei plugin, cosa che ho aggirato rimuovendo gli altri plugin. Mi basavo su questo, ma sembra che le parentesi fossero posizionate nel punto sbagliato.
Sì, il database è migrato nell’ambiente di test. Ho aggirato questo errore commentando la riga raise ArgumentError.new("No setting named '#{name}' exists") e sostituendola con un puts, e risulta che solo discourse_narrative_bot_enabled genera questo errore; tutte le altre impostazioni sono corrette. Non credo che abbiamo fatto nulla con questa impostazione. Comunque, dato che il mio spec è stato eseguito correttamente ignorando questo errore, posso lasciare la soluzione temporanea nel mio Discourse locale. Quando scoprirò cosa ha effettivamente causato questo problema, aggiornerò questo post.
La nostra CI funziona per PR e commit, ma con il job cron fallisce qui ogni volta.
Sono in grado di riprodurre questo sulla console rails con un blocco simile:
[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
Questo funziona se metto:
[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 solo per controllare, fallisce con:
[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
Quindi propongo la seguente modifica in una PR che sarei felice di inviare:
if ENV['LOAD_PLUGINS'] == '1' && s.has_setting? :discourse_narrative_bot_enabled
Per qualche motivo la presenza del plugin narrative bot non può essere garantita?
In questi esempi, l’impostazione del sito è discourse_narrative_bot_enab, non discourse_narrative_bot_enabled. Suppongo che una volta corretta, non sia riproducibile?
La cosa più sorprendente qui è:
Ciò suggerisce una differenza nell’ambiente di runtime per le esecuzioni pianificate
Guardando uno dei log di errore, sembra che GitHub stia clonando il plugin multilingue direttamente nella directory plugins, anziché nella sua directory. Quindi, sta essenzialmente “disinstallando” tutti i plugin principali (e non riuscendo a installarsi correttamente).
Guardando la documentazione, non sembra esserci un modo coerente per ottenere il nome del repository (senza il proprietario), quindi avremo bisogno di qualche espediente. Penso che questo dovrebbe funzionare:
cc @cvx - forse dovremmo usare questa tecnica nel CI del modello di plugin/tema?