hannes_e
(Hannes)
2025 年3 月 20 日 15:34
1
您好!
在尝试授予用户(实际上是任何用户)管理员权限时,我只收到以下错误消息(在点击确认链接后):
我检查了日志,发现了以下消息:
ActiveRecord::RecordInvalid (Validation failed: Name has already been taken) app/models/group.rb:607:in 'refresh_automatic_group!' app/models/group.rb:666:in 'block in refresh_automatic_groups!' app/m
Failed to handle exception in exception app middleware : ActiveRecord::RecordInvalid : Validation failed: Name has already been taken
大约在同一时间,我还收到一条关于 MaxMind 无法正常工作的消息,不确定这是否与此有关(在管理员界面中未找到任何相关设置):
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-City.mmdb) could not be found: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-City.mmdb
如何进一步调试这个问题?
谢谢,
Hannes
hannes_e
(Hannes)
2025 年3 月 20 日 16:07
3
不,点击“授予管理员”按钮可以正常工作。
完整流程如下:
我点击“授予管理员”按钮,应用程序会弹出一个模态框:“我们已向您发送一封电子邮件以验证新管理员。请打开它并按照说明操作。”
我点击电子邮件中的确认链接(“确认管理员帐户”),该链接将我带到一个确认页面。
在确认页面上,我点击“授予管理员访问权限”按钮,然后出现错误页面(请参阅我原始帖子中的屏幕截图),日志中也显示了错误消息。
我还注意到日志中更靠上的以下消息(前面带有数字 46 - 这是否意味着它已重复 46 次):
Error ensuring consistency for Group: Validation failed: Name has already been taken
sam
(Sam Saffron)
2025 年3 月 21 日 03:33
4
这似乎是一个非常有趣的边缘情况。假设这是自托管的,它会返回什么?
./launcher enter app
rails c
Group.pluck(:name, :id)
=> [["everyone", 0],
["moderators", 2],
["admins", 1],
["staff", 3],
["trust_level_0", 10],
["trust_level_1", 11],
["trust_level_2", 12],
["trust_level_3", 13],
["trust_level_4", 14]]
Discourse 对这些 ID 非常讲究,staff 必须是 2,admins 必须是 1。如果你碰巧有同名的其他组,可能会出问题。我也会确保没有用户名为 admins。
hannes_e
(Hannes)
2025 年3 月 21 日 08:30
5
看起来是这样的(还有很多其他组,但它们显然是我们创建的,并且与系统组没有任何相似之处,所以我没有在下面包含它们):
=> [["everyone", 0],
["moderators", 2],
["admins", 1],
["trust_level_0", 10]
["trust_level_1", 11],
["trust_level_2", 12],
["trust_level_3", 13],
["trust_level_4", 14],
["Staff", 42]]
我注意到没有名为 staff 的组,只有一个名为 Staff 的组 - 如果 staff 始终具有 id 3,那么我认为这表明有人删除了它并创建了一个新组(id 42)。
重新创建 staff 是否足够,或者我该如何解决这个问题?
hannes_e
(Hannes)
2025 年3 月 25 日 13:47
8
是否可以通过命令行重命名组,或者我该如何解决这种情况?
hannes_e
(Hannes)
2025 年3 月 26 日 11:26
10
是的,这招奏效了!该组确实存在,但有人将其重命名了——由于这基本上破坏了核心功能,我想知道是否应该在 UI 中禁止重命名系统组。
供记录,以防有人遇到类似情况:
docker exec -it app /bin/bash
su - postgres
psql -d discourse
discourse=# update groups set name='staff' where id=3;
\q
5 个赞