Comment vérifier ce qui empêche le rake migrate ?

J’essaie le multisite, j’ai installé la deuxième instance et cela fonctionne à merveille.

Mais maintenant, je n’arrive plus à reconstruire. Les logs indiquent :

warning " > babel-plugin-debug-macros@0.4.0-pre1" has unmet peer dependency "@babel/core@^7.0.0".
warning "workspace-aggregator-ffab61d1-8b70-4cda-8f38-dde575adc062 > discourse > @uppy/xhr-upload@3.1.0" has incorrect peer dependency "@uppy/core@^3.0.6".
PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint "idx_category_users_user_id_category_id"
DETAIL:  Key (user_id, category_id)=(-4, 9) already exists
Pups::ExecError: cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 695 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:\nmigrate'"]}
bootstrap failed with exit code 1

J’ai essayé sans plugins et ça ne fonctionne toujours pas. Je peux démarrer l’application mais pas reconstruire.

Avez-vous installé Discourse Chatbot :robot: (compatible avec ChatGPT) ?

Oui et j’ai essayé de désinstaller ensuite (parce que j’ai vu que je ne pouvais pas tester les plugins en multisite sans les sélectionner à la main).

Cette erreur provient de là, vous devrez corriger manuellement l’enregistrement de la base de données et supprimer les doublons, même après avoir désinstallé un plugin, car ce qu’il ajoute à une base de données est permanent.

2 « J'aime »

Merci. Pouvez-vous confirmer si c’est ce que je cherche ?

discourse=# \d category_users
                                            Table "public.category_users"
       Column       |            Type             | Collation | Nullable |                  Default                   
--------------------+-----------------------------+-----------+----------+--------------------------------------------
 id                 | integer                     |           | not null | nextval('category_users_id_seq'::regclass)
 category_id        | integer                     |           | not null | 
 user_id            | integer                     |           | not null | 
 notification_level | integer                     |           | not null | 
 last_seen_at       | timestamp without time zone |           |          | 
Indexes:
    "category_users_pkey" PRIMARY KEY, btree (id)
    "idx_category_users_category_id_user_id" UNIQUE, btree (category_id, user_id)
    "index_category_users_on_user_id_and_last_seen_at" btree (user_id, last_seen_at)

J’ai essayé DROP INDEX idx_category_users_category_id_user_id mais j’apprécierais vraiment la commande précise ici :slight_smile:

Hmmm, vraisemblablement des dizaines d’installations et aucun problème de ce genre dont j’ai connaissance.

Quel est le problème spécifique ici ?

Le script de fixtures initialise l’utilisateur du bot (donc l’administrateur n’a pas besoin d’accéder à la console Rails) et cela peut échouer si on tente de le faire deux fois, mais il y a une vérification. Je vais vérifier si la vérification est infaillible. Est-ce que cela s’exécute deux fois dans cette version d’installation ?

Vous ne devriez PAS supprimer l’index !

Il vous suffit de supprimer l’enregistrement en double.

Trouvez le deuxième enregistrement avec user_id = -4 et category_id 9 et supprimez-le en utilisant son id.

C’est une opération risquée, alors vérifiez d’abord avec :

SELECT FROM category_users WHERE id = <le deuxième id>;

pour vous assurer qu’il ne renvoie qu’un seul enregistrement, puis :

DELETE FROM category_users WHERE id = <le deuxième id>;

Pouvez-vous rappeler quels changements, le cas échéant, vous avez apportés concernant le bot ?

3 « J'aime »

Pour ajouter, je ne pense pas que vous ayez besoin de supprimer le plugin ici une fois que cela sera résolu, mais je suis très curieux de savoir pourquoi ce scénario s’est produit en premier lieu, car je n’ai eu aucun autre rapport ?

Merci Robert, j’ai posé la question car je ne suis clairement pas un expert en bases de données et j’ai des sauvegardes, mais il vaut toujours mieux ne pas faire délibérément la mauvaise chose :smiling_face_with_sunglasses:

Le bot n’a pas été modifié par moi, mais j’utilise les catégories par défaut sur chaque groupe et cela semble casser votre implémentation.

Il y a plus d’informations ici sur Meta, j’espère que vous pourrez découvrir cela et ajouter des vérifications pour éviter le problème :

2 « J'aime »

Ok, alors ce n’est peut-être pas entièrement de ma faute :sweat_smile:

2 « J'aime »