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
- 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.
- 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
- 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).
- 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;
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
attachments, e a lista de contatos do painel no frontend deve ser atualizada pacificamente comHTTP 200 OK.Actual Behavior
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 500por trás da tela).ActionView::Template::Error / ActiveRecord::StatementInvalid, tornando impossível excluir contatos ou inboxes com foto pela interface do sistema.Environment
evoapicloud/evo-ai-crm-community:latestScreenshots
No response
Relevant Logs