Skip to content

Bug Report: Tabela "attachments" dessincronizada dos Modelos (Falta de colunas polimórficas)[Bug]: #21

@Clalber

Description

@Clalber

Description

Bug Report: Tabela "attachments" dessincronizada dos Modelos (Falta de colunas polimórficas)

Ambiente: Self-Hosted (Community) Imagem afetada: evoapicloud/evo-ai-crm-community:latest

Problema: Os processos no Sidekiq (Webhooks recebendo mídias da Evolution API) e exclusão de Contatos pelo CRM estão falhando com Erro 500 (Internal Server Error).

Causa Raiz (Log do Erro): PG::UndefinedColumn: ERROR: column attachments.attachable_id does not exist

A tabela attachments no banco evo_community só possui a coluna legada message_id. No entanto, o model de Attachment (ou ActiveStorage) atualizado já requer attachable_id (tipo uuid) e attachable_type (tipo varchar) para salvar mídias ou exluir avatares associados ao deletar um contato.

Constatamos que rodando rails db:migrate no container do CRM nada acontece (ou seja, o arquivo de migração do banco que insere o polymorphic no attachable foi esquecido no db/migrate da branch dessa imagem do Docker ou o schema.rb que ela usa de base está com downgrade). Tivemos que injetar as colunas manualmente no Postgres via string SQL para normalizar.

Como reproduzir o erro em uma instalação zerada:

Affected Service

CRM Service (evo-ai-crm-community)

Steps to Reproduce

Instalar a Stack oficial limpa.
Criar ou sincronizar um contato com Inbox do WhatsApp.
Tentar receber uma "Figurinha/Imagem" do contato ou tentar "Deletar o Contato" via interface.
O Puma/Sidekiq vai Crashar com ActiveRecord::StatementInvalid da coluna não existente.

Expected Behavior

  1. Ao enviar ou receber arquivos de mídias pelo WhatsApp (Evolution API), a mídia deveria ser salva corretamente na base de dados (ActiveStorage) e exibida na aba de Chat do CRM, sem travar a interface.
  2. Ao clicar no botão para "Deletar", um Contato que possui avatar deve ser removido com sucesso, juntamente com o seu avatar em attachments, e a lista de contatos do painel no frontend deve ser atualizada pacificamente com HTTP 200 OK.

Actual Behavior

  1. Quando uma mídia é recebida, o Job do Sidekiq encarregado quebra silenciosamente ao acessar o modelo Attachment. Consequente a isso, as mensagens param de carregar/atualizar em tempo real passando a falsa impressão de que a conexão caiu (HTTP 500 por trás da tela).
  2. Tentar deletar um contato aborta a transação do banco de dados na mesma hora, exibindo no servidor a falha crítica ActionView::Template::Error / ActiveRecord::StatementInvalid, tornando impossível excluir contatos ou inboxes com foto pela interface do sistema.

Environment

  • OS: Linux Ubuntu/Debian (VPS) rodando Docker Swarm
  • Docker version: Docker versão 24+ / Docker Compose
  • Browser: Relatado em qualquer navegador atualizado (Chrome, Edge, Safari).
  • Service Image: evoapicloud/evo-ai-crm-community:latest

Screenshots

No response

Relevant Logs

E, [2026-04-17T19:42:50.738883 #1] ERROR -- : [7abaa733-f9f7-4622-9ef4-e5e6506699c0] Internal Server Error: ActiveRecord::StatementInvalid - PG::UndefinedColumn: ERROR:  column attachments.attachable_id does not exist
LINE 1: SELECT "attachments".* FROM "attachments" WHERE "attachments...

### Resolução paliativa utilizada que confirma o bug:
Acessamos o banco PostgreSQL diretamente no container e rodamos o código abaixo em SQL para injetar as colunas polimórficas (tipo UUID) que ficaram de fora na migração original da branch atual. Isso normalizou o sistema na hora:

ALTER TABLE attachments ADD COLUMN IF NOT EXISTS attachable_id uuid;
ALTER TABLE attachments ADD COLUMN IF NOT EXISTS attachable_type varchar; 
UPDATE attachments SET attachable_id = message_id, attachable_type = 'Message' WHERE attachable_id IS NULL AND message_id IS NOT NULL;

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions