Como verificar o que impede o rake migrate?

Estou tentando usar a instalação multissite, instalei a segunda instância e funciona perfeitamente.

Mas agora não consigo reconstruir. Os logs mostram:

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

Tentei sem plugins e ainda está quebrado. Consigo iniciar o aplicativo, mas não reconstruir.

Você instalou o Discourse Chatbot :robot: (suportando ChatGPT)?

Sim e tentei desinstalar então (porque vi que não consigo testar plugins no multisite sem escolhê-los manualmente).

Esse erro está vindo dele, você precisará corrigir manualmente o registro do banco de dados e remover os duplicados, mesmo após desinstalar um plugin, pois o que ele adiciona a um banco de dados é permanente.

2 curtidas

Obrigado. Você pode confirmar se é isso que estou procurando?

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)

Eu tentei DROP INDEX idx_category_users_category_id_user_id mas eu realmente apreciaria o comando preciso aqui :slight_smile:

Hmmm, presumivelmente dezenas de instalações e nenhum problema desse tipo que eu saiba.

Qual é o problema específico aqui?

O script de fixtures semeia o usuário do bot (para que o administrador não precise acessar o console do Rails) e isso pode falhar se for tentado duas vezes, mas há uma verificação. Vou verificar se a verificação é à prova de falhas. Isso está sendo executado duas vezes neste tipo de instalação?

Você NÃO deve remover o índice!

Você só precisa excluir o registro duplicado.

Encontre o segundo registro com user_id = -4 e category_id 9 e exclua-o usando seu id

Esta é uma operação arriscada, então primeiro verifique com:

SELECT FROM category_users WHERE id = <o segundo id>;

para garantir que ele retorne apenas um registro, então:

DELETE FROM category_users WHERE id = <o segundo id>;

Você consegue se lembrar de quais alterações, se houver, você fez em relação ao bot?

3 curtidas

Apenas para acrescentar, não acho que você precise remover o plugin aqui assim que isso for resolvido, mas estou muito curioso para saber por que esse cenário surgiu em primeiro lugar, já que não tive outros relatos?

Obrigado Robert, perguntei porque claramente não sou um cara de banco de dados e tenho backups, mas é sempre melhor não fazer algo errado deliberadamente :smiling_face_with_sunglasses:

O bot não foi modificado por mim, mas estou usando categorias padrão em todos os grupos e parece que isso quebra sua implementação.

Há mais informações aqui no Meta, espero que você possa descobrir isso e adicionar algumas verificações para evitar o problema:

2 curtidas

Ok, então talvez não tenha sido inteiramente culpa minha :sweat_smile:

2 curtidas