Ho riscontrato un problema durante l’aggiornamento da v2026.3.0-latest. Il task rake db:seed_fu fallisce quando raggiunge 002_groups.rb con questo errore:
ActiveRecord::RecordInvalid: Validation failed: Name has already been taken. (ActiveRecord::RecordInvalid)
Il crash avviene proprio quando il seeder tenta di inizializzare i nuovi gruppi di sistema (ID 4: anonymous e ID 5: logged_in_users).
Ho confermato la situazione tramite la console di Rails. Eseguire un controllo manuale fallisce per validazione, ma bypassando la validazione il database accetta il record senza alcun problema:
# Questo fallisce con «Name has already been taken»
g = Group.new(id: 4, name: "anonymous", automatic: true)
g.valid?
# Questo funziona correttamente, dimostrando che non c'è un vero conflitto
g.save(validate: false)
Sono riuscito a superare questo ostacolo creando manualmente questi nuovi gruppi di sistema:
Questo accade quando esiste già un gruppo o un utente (!!!) chiamato anonymous.
Abbiamo molti forum in cui anonymous è stato utilizzato come nome utente dopo un’importazione.
Il commit menziona
Questa PR introduce due nuovi gruppi automatici: anonymous_users e logged_in_users
ma a quanto pare il gruppo è stato infine chiamato anonymous senza _users.
È un peccato perché
anonymous rende poco chiaro se si tratta di un gruppo di utenti o di un singolo utente
il rischio di un conflitto con un gruppo o un utente esistente è molto più alto senza _users
Soluzioni suggerite:
1 - rinominare il gruppo in anonymous_users, in linea con logged_in_users e riducendo enormemente il rischio di conflitti
2 - almeno rilevare il conflitto e rinominare l’utente o il gruppo esistente invece di generare un errore
La tua migrazione esamina i gruppi esistenti. Tuttavia, dovrebbe esaminare anche gli utenti esistenti, poiché utenti e gruppi condividono uno stesso namespace e non è possibile avere un gruppo con lo stesso nome di un utente.
Hmm, ok, è piuttosto fastidioso… sto creando una PR per farlo:
Il che, come dici tu, dovrebbe ridurre drasticamente la possibilità di un conflitto. Dubito molto che esista un utente chiamato anonymous_users, quindi non penso sia necessaria una verifica o migrazione automatica se eseguo questa rinomina.
Inizialmente no. Falliva durante le migrazioni nel processo standard di rebuild, ed è così che è stato portato alla mia attenzione inizialmente e l’ho individuato. Stavo poi eseguendo manualmente il task rake per la risoluzione dei problemi.