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.

2 Mi Piace

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?

3 Mi Piace

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:

2 Mi Piace

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

2 Mi Piace