hannes_e
(Hannes)
2025 年 3 月 20 日午後 3: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
pfaffman
(Jay Pfaffman)
2025 年 3 月 20 日午後 3:44
2
「管理者権限を付与」ボタンをクリックすると、そのエラーが発生しますか?
hannes_e
(Hannes)
2025 年 3 月 20 日午後 4:07
3
「管理者権限を付与」ボタンをクリックすると機能します。
完全なプロセスは以下のとおりです。
「管理者権限を付与」ボタンをクリックすると、アプリケーションに「新しい管理者を検証するためにメールを送信しました。メールを開いて指示に従ってください。」というモーダルが表示されます。
メール内の確認リンク(「管理者アカウントを確認」)をクリックすると、確認ページに移動します。
確認ページで「管理者アクセスを付与」ボタンをクリックすると、エラーページ(元の投稿のスクリーンショットを参照)が表示され、ログにもエラーメッセージが表示されます。
また、ログのさらに上の方に次のメッセージがあることに気づきました(46という数字が前に付いています。これは46回繰り返されたことを意味しますか?)。
Error ensuring consistency for Group: Validation failed: Name has already been taken
sam
(Sam Saffron)
2025 年 3 月 21 日午前 3: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 日午前 8: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 を再度作成するだけで十分でしょうか、それともどのように解決すればよいでしょうか?
sam
(Sam Saffron)
2025 年 3 月 21 日午前 9:02
6
うん、あなたのスタッフグループの名前を変更するだけで問題を解決できると思います
「いいね!」 1
hannes_e
(Hannes)
2025 年 3 月 25 日午後 1:47
8
コマンドラインでグループ名を変更することは可能ですか、またはこの状況をどのように解決できますか?
sam
(Sam Saffron)
2025 年 3 月 25 日午後 8:35
9
それから直接DBから試してください、安全であるはずです
「いいね!」 2
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
sam
(Sam Saffron)
2025 年 3 月 26 日午後 8:25
11
ええ、それは絶対にあなたが入れない状態であるべきです
「いいね!」 3