Db:seed_fu falha em 002_groups.rb durante a atualização: Validação falhou: Nome já foi registrado

Encontrei um problema ao atualizar a partir de v2026.3.0-latest. A tarefa rake db:seed_fu falha ao atingir 002_groups.rb com o seguinte erro:

ActiveRecord::RecordInvalid: Validation failed: Name has already been taken. (ActiveRecord::RecordInvalid)

A falha ocorre exatamente quando o seedador tenta inicializar os novos grupos do sistema (ID 4: anonymous e ID 5: logged_in_users).

Confirmei isso no console do Rails. Uma verificação manual falha na validação, mas contornando a validação, o banco de dados aceita o registro sem problemas:

# Isso falha com „Name has already been taken"
g = Group.new(id: 4, name: „anonymous", automatic: true)
g.valid?

# Isso funciona perfeitamente, provando que não há conflito real
g.save(validate: false)

Consegui superar esse obstáculo criando manualmente esses novos grupos do sistema:

ActiveRecord::Base.transaction do
  g4 = Group.new(id: 4, name: „anonymous", automatic: true)
  g4.save(validate: false)

  g5 = Group.new(id: 5, name: „logged_in_users", automatic: true)
  g5.save(validate: false)
end

Agora, ao executar rake db:seed_fu, o processo é concluído sem erros.

Para onde foi o botão “Eu também!”?

Isso acontece quando você já possui um grupo ou usuário (!!!) chamado anonymous.

Temos muitos fóruns onde anonymous foi usado como nome de usuário após uma importação.
O commit menciona

Este PR introduz dois novos grupos automáticos: anonymous_users e logged_in_users

mas, aparentemente, o grupo acabou sendo chamado de anonymous sem o _users.

Isso é uma pena porque:

  • anonymous deixa incerto se é um grupo de usuários ou um único usuário
  • o risco de conflito com um grupo ou usuário existente é muito maior sem o _users

Soluções sugeridas:
1 - nomear o grupo como anonymous_users afinal, está mais alinhado com logged_in_users e reduz enormemente o risco de conflito
2 - pelo menos detectar o conflito e renomear o usuário ou grupo existente em vez de gerar um erro

1 curtida