Come controllare cosa impedisce a rake migrate?

Sto provando il multisito, ho installato la seconda istanza e funziona alla grande.

Ma ora non riesco più a ricostruire. I log mostrano:

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

Ho provato senza plugin e continua a essere rotto. Riesco ad avviare l’app ma non a ricostruire.

Hai installato Discourse Chatbot :robot: (supporta ChatGPT)?

Sì e ho provato a disinstallarlo (perché ho visto che non posso testare i plugin in multisite senza selezionarli manualmente).

Quell’errore proviene da esso, dovrai correggere manualmente il record del database e rimuovere i duplicati anche dopo aver disinstallato un plugin, poiché ciò che aggiunge a un database è permanente.

Grazie. Puoi confermare se è quello che sto cercando?

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)

Ho provato DROP INDEX idx_category_users_category_id_user_id ma apprezzerei davvero il comando preciso qui :slight_smile:

Hmmm, presumibilmente decine di installazioni e nessun problema di questo tipo di cui sono a conoscenza.

Qual è il problema specifico qui?

Lo script delle fixture popola l’utente del bot (quindi l’amministratore non ha bisogno di accedere alla console di Rails) e questo potrebbe fallire se tentato due volte, ma c’è un controllo. Verificherò se il controllo è a prova di bomba. Questo viene eseguito due volte in questo tipo di installazione?

Non dovresti eliminare l’indice!

Devi solo eliminare il record duplicato.

Trova il secondo record con user_id= -4 e category_id 9 ed eliminalo usando il suo id

Questa è un’operazione rischiosa, quindi prima verifica con:

SELECT FROM category_users WHERE id = <il secondo id>;

per assicurarti che restituisca solo un record, quindi:

DELETE FROM category_users WHERE id = <il secondo id>;

Puoi ricordare quali modifiche hai apportato al bot, se ne hai apportate?

Per aggiungere, non credo che tu debba rimuovere il plugin qui una volta risolto, ma sono molto curioso di sapere perché questo scenario si è verificato in primo luogo, dato che non ho avuto altre segnalazioni?

Grazie Robert, ho chiesto perché chiaramente non sono un esperto di DB e ho dei backup, ma è sempre meglio non fare deliberatamente la cosa sbagliata :smiling_face_with_sunglasses:

Il bot non è stato modificato da me, ma sto usando le categorie predefinite su ogni gruppo e sembra che questo interrompa la tua implementazione.

Ci sono altre informazioni qui su Meta, spero tu possa scoprirlo e aggiungere alcuni controlli per evitare il problema:

Ok, quindi forse non è interamente colpa mia :sweat_smile: