Comment dépanner les erreurs de base de données dans un plugin obsolète ?

Je suis nouveau dans le développement de plugins Discourse, et pour commencer, j’essaie de mettre à jour ce plugin de quiz pour qu’il fonctionne avec la dernière version de Discourse.

Si cela ne vous dérange pas trop, j’aimerais un peu d’aide pour comprendre comment résoudre cette erreur qui apparaît chaque fois que j’essaie de créer ou de visualiser un sujet alors que le plugin est activé :

Message

Job exception: PG::UndefinedTable: ERROR:  relation "quizzes" does not exist
LINE 9:  WHERE a.attrelid = '"quizzes"'::regclass
                            ^


Backtrace

rack-mini-profiler-3.3.0/lib/patches/db/pg.rb:110:in `exec'
rack-mini-profiler-3.3.0/lib/patches/db/pg.rb:110:in `async_exec'
activerecord-7.0.8/lib/active_record/connection_adapters/postgresql/database_statements.rb:19:in `block (2 levels) in query'
activesupport-7.0.8/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
activesupport-7.0.8/lib/active_support/dependencies/interlock.rb:41:in `permit_concurrent_loads'
activerecord-7.0.8/lib/active_record/connection_adapters/postgresql/database_statements.rb:18:in `block in query'
activesupport-7.0.8/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
activesupport-7.0.8/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `synchronize'
activesupport-7.0.8/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
activesupport-7.0.8/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'

Y a-t-il des problèmes courants que je devrais rechercher et qui pourraient expliquer pourquoi la relation n’existe pas ? Ces problèmes se trouveraient-ils généralement dans le répertoire /db ?

Au cas où ce serait pertinent : j’utilise l’environnement de développement Docker sous Linux, comme décrit dans ce guide et vous pouvez voir ce que j’ai fait jusqu’à présent ici.

Il semble que vous n’ayez pas exécuté les migrations.

Vous avez besoin d’une variable d’environnement supplémentaire pour les exécuter pour les plugins, voir :

2 « J'aime »

Merci pour votre réponse rapide ! Je viens de remarquer d/migrate, qui a semblé résoudre le problème après que je l’ai exécuté. Comment cela se compare-t-il à LOAD_PLUGINS=1 RAILS_ENV=test rake db:migrate ?

d/migrate est un wrapper de script docker.

la commande que j’ai partagée est la vraie commande rails qui est exécutée.

alternativement, vous pouvez entrer dans le conteneur en cours d’exécution et exécuter la commande rails.

(mais oui, vous n’avez pas besoin de cibler l’environnement de test !)

Ça marche ! Merci pour votre aide.

J’ai ouvert d/migrate et j’ai vu qu’il contenait tout ce qui se trouvait dans la commande que vous avez partagée, à l’exception de LOAD_PLUGINS=1. Je ne suis pas sûr de pourquoi cela a fonctionné sans cela, mais cela me convient parfaitement.

2 « J'aime »

Bon homme !

C’est toujours bien de lever le voile ! Beaucoup de gens ne lisent tout simplement pas le code source et c’est souvent plus utile que vous ne le pensez !

Oui, c’est une distinction intéressante - je me demande si c’est seulement nécessaire lorsqu’on fait cela pour l’environnement de test :thinking:

2 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.