NoMethodError : méthode non définie `min_tags_from_required_group'

Salut l’équipe Discourse !

J’essaie d’exécuter Discourse Docker sur Ubuntu en version stable (v2.8.8) et je rencontre l’erreur suivante :

rake aborted!
NoMethodError: undefined method `min_tags_from_required_group' for #<Category:0x00007fc2ffae9f38>
/src/lib/seed_data/categories.rb:114:in `create_category'
/src/lib/seed_data/categories.rb:15:in `block (2 levels) in create'
/src/lib/seed_data/categories.rb:15:in `each'
/src/lib/seed_data/categories.rb:15:in `block in create'
/src/lib/seed_data/categories.rb:14:in `create'
(eval):6:in `block (2 levels) in run_file'
/src/lib/tasks/db.rake:225:in `block (2 levels) in <main>'
/src/lib/distributed_mutex.rb:33:in `block in synchronize'
/src/lib/distributed_mutex.rb:29:in `synchronize'
/src/lib/distributed_mutex.rb:29:in `synchronize'
/src/lib/distributed_mutex.rb:14:in `synchronize'
/src/lib/tasks/db.rake:210:in `block in <main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

Informations supplémentaires sur ce que j’ai fait jusqu’à présent :

Ce que j’ai fait pour en arriver là :

sudo -s
git clone -b v2.8.8 https://github.com/discourse/discourse.git
chmod -R 2777 ./discourse
cd discourse

J’ai rencontré quelques problèmes avec les signets plus tôt, j’ai donc dû :

nano db/migrate/20220104053343_add_bookmark_polymorphic_columns.rb

et coller ceci : discourse/db/migrate/20220322024216_add_bookmark_polymorphic_columns.rb at cd817a436574cd00f0bae339ec0c4fe2fcf2bb50 · discourse/discourse · GitHub

Ensuite, lorsque j’exécute :

d/boot_dev -p --init

J’obtiens l’erreur concernant min_tags_from_required_groups.

Quelqu’un peut-il m’aider ?

S’agit-il d’une installation de développement ou d’une installation standard ?

Si vous essayez de déployer en production, vous devrez définir la version sur « stable » dans votre fichier app.yml. Vous n’auriez pas cloné Discourse comme vous l’avez indiqué.

Avez-vous des plugins ?

Salut @pfaffman ,

Merci de votre réponse !

Ceci est une instance de développement, donc je n’ai pas le fichier app.yml.

Aucun plugin installé, j’espérais juste exécuter une instance de développement sur la version stable sur Ubuntu.

Ah ! Je vois maintenant. Peut-être que je ne devrais pas poster au milieu de la nuit.

Y avait-il une base de données avant que vous ne passiez à stable ? peut-être que vous devez

  rake db:drop db:create db:migrate

Vous n’aurez pas besoin de sélectionner une migration.

1 « J'aime »

Salut @pfaffman,

J’espère que tu as passé un excellent week-end ! Merci pour ta réponse, je vais tester cela aujourd’hui et je te tiens au courant !

1 « J'aime »

Salut @pfaffman ,

Après avoir exécuté sudo -s puis d/rake db:drop db:create db:migrate, j’ai obtenu l’erreur suivante :

PG::InsufficientPrivilege: ERROR:  must be owner of database discourse_development
Couldn't drop database 'discourse_development'
rake aborted!
ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERROR:  must be owner of database discourse_development


Caused by:
PG::InsufficientPrivilege: ERROR:  must be owner of database discourse_development

Tasks: TOP => db:drop:_unsafe
(See full trace by running task with --trace)

Je suis allé dans d/psql et j’ai obtenu la liste :

discourse-> \l
                                          List of databases
           Name           |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges    
--------------------------+----------+----------+-------------+-------------+------------------------
 discourse                | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres          +
                          |          |          |             |             | postgres=CTc/postgres +
                          |          |          |             |             | discourse=CTc/postgres
 discourse_development    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres          +
                          |          |          |             |             | postgres=CTc/postgres +
                          |          |          |             |             | discourse=CTc/postgres
 discourse_test           | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres          +
                          |          |          |             |             | postgres=CTc/postgres +
                          |          |          |             |             | discourse=CTc/postgres
 discourse_test_multisite | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres          +
                          |          |          |             |             | postgres=CTc/postgres +
                          |          |          |             |             | discourse=CTc/postgres
 postgres                 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0                | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres           +
                          |          |          |             |             | postgres=CTc/postgres
 template1                | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres           +
                          |          |          |             |             | postgres=CTc/postgres
(7 rows)

Comment puis-je résoudre cette erreur ?

Hmm. Peut-être supprimez et recréez ces bases de données vous-même et migrez-les avec la tâche rake. Ou donnez à l’utilisateur discourse les droits de créer et de détruire (je pense que c’est plus facile).

Salut @pfaffman,

Je ne suis pas très familier avec le processus d’octroi des droits d’utilisateur Discourse pour créer et détruire malheureusement. Dans la première option cependant, dites-vous que je devrais simplement supprimer toutes ces bases de données, puis exécuter d/rake db:create db:migrate ? Est-ce correct ?

1 « J'aime »

Recherchez « rôles utilisateur postgres » sur Google ou quelque chose de similaire. C’est ce que je fais. C’est quelque chose comme ça

su - postgres
psql
grant all rights to usee 'discoursev;

Mais c’est probablement faux

Salut @pfaffman,

Merci pour votre aide jusqu’à présent ! Je voulais juste prendre un peu de recul avant d’aller plus loin dans le dépannage de psql. Mon objectif principal est simplement d’exécuter l’environnement de développement Discourse docker (sur stable) sur Ubuntu, ce qui fonctionne bien et comme prévu sur Mac. Ne devrais-je pas pouvoir le faire sans ces erreurs de table et de migration ? Lorsque je tente une nouvelle installation, j’obtiens l’erreur de signet, et après l’avoir résolue, j’obtiens cette erreur NoMethodError, et maintenant l’erreur InsufficientPrivilege.

Initialement, je pensais que c’était parce que j’étais sur test-passed, puis passer à stable a causé le problème, mais même dans une instance Ubuntu propre et vide, la NoMethodError apparaît toujours, et ce sans aucune base de données préexistante. J’ai juste suivi les étapes #1 et #2 ici :

Êtes-vous en mesure d’installer stable sur Ubuntu sans problème ?

Remontée de ce fil de discussion ! Je me demande si quelqu’un d’autre a réussi à exécuter un environnement de développement sur la version stable d’Ubuntu.

Essayer

   ./bundle exec rake db:drop db:create db:migrate

Salut @pfaffman,

Merci pour ta réponse ! Malheureusement, je rencontre toujours le même problème :

d/bundle exec rake db:drop db:create db:migrate
PG::InsufficientPrivilege: ERROR:  must be owner of database discourse_development
Couldn't drop database 'discourse_development'
rake aborted!
ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERROR:  must be owner of database discourse_development
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'

Caused by:
PG::InsufficientPrivilege: ERROR:  must be owner of database discourse_development
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => db:drop:_unsafe
(See full trace by running task with --trace)

J’ai tenté cela sur une instance vide (redémarrée depuis le début, sans bases de données ni informations existantes) en utilisant le guide du débutant et cela rend le même résultat.

C’est l’erreur que j’obtiens toujours dans d/rails s

NoMethodError (undefined method `min_tags_from_required_group' for #<Category:0x00007f3cca7ce5a8>)
(eval):36:in `_fast_attributes'
app/models/site.rb:70:in `block in all_categories_cache'
lib/cache.rb:94:in `fetch'
app/models/site.rb:52:in `all_categories_cache'
app/models/site.rb:78:in `categories'
app/serializers/site_serializer.rb:203:in `categories'
(eval):32:in `_fast_attributes'
app/models/site.rb:167:in `json_for'
app/controllers/application_controller.rb:595:in `preload_anonymous_data'
app/controllers/finish_installation_controller.rb:69:in `ensure_no_admins'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/missing_avatars.rb:23:in `call'
lib/middleware/turbo_dev.rb:34:in `call'

Alors vous devrez supprimer la base de données d’une autre manière. Vous pouvez rechercher des informations sur postgres (c’est ce que je fais quand j’ai besoin de le faire) ou attendre que quelqu’un qui s’en souvient poste ici. L’autre option est de vérifier que l’utilisateur discourse a les droits de supprimer et de créer des bases de données.