Ho un plugin che deve popolare alcuni gruppi.
Seguendo Add new webhooks and customize webhook payload, in plugin.rb ho:
SeedFu.fixture_paths << Rails.root.join("plugins", "discourse-pfaffmanager", "db", "fixtures").to_s
Nel file db/fixtures/001_create_pfaffmanager_groups ho qualcosa del genere:
Group.seed do |g|
g.name = SiteSetting.pfaffmanager_ec2_pro_server_group
g.visibility_level = Group.visibility_levels[:owners]
end
Se eseguo ./bin/rake db:migrate, funziona come previsto, ma quando eseguo gli spec ricevo:
# ERROR: duplicate key value violates unique constraint "index_groups_on_name"
Quindi sembra che gli spec vogliano eseguire e rieseguire questi seed? Non ha molto senso, perché se rieseguo la migrazione non si verificano errori.
Forse dovrei spostare quegli spec in spec/fixtures e far sì che il plugin crei quei gruppi all’avvio? È una buona pratica? Penso che mi piaccia di più l’idea di creare quei gruppi durante la migrazione piuttosto che verificarli con Group.find_or_create_by ad ogni avvio del plugin, ma attualmente funziona.
Inoltre, ./bin/rake db:drop db:create db:migrate sembra creare il database di test, ma non esegue le migrazioni a meno che non specifichi RAILS_DB=test ./bin/rake db:migrate. È questo il comportamento atteso? Pensavo che avrebbe eseguito quelle migrazioni.
Ora sono ancora più confuso: anche dopo la migrazione del database di test descritta sopra, ricevo:
ActiveRecord::StatementInvalid:
PG::UndefinedTable: ERROR: relation "groups" does not exist
LINE 8: WHERE a.attrelid = '"groups"'::regclass
E vedo cose del genere nei log quando ho eseguito la migrazione:
-- execute("UPDATE groups\nSET flair_icon = 'fab-youtube'\nWHERE flair_icon = 'youtube-play' OR flair_icon = 'fa-youtube-play'\n")
Allora ho eseguito:
./bin/rake db:test:prepare
e questo ha risolto il problema, ma non ricordo di aver dovuto farlo in passato.