ユーザーマージに失敗しました。サードパーティ製プラグインによるデータベースエントリの破損

元のタイトル: フォーラムのトップページにアクセスできない(空白の画面または404エラー)

私は、Fediverse ソーシャル領域を動かす ActivityPub プロトコルの技術フォーラムである https://socialhub.activitypub.rocks の SocialHub フォーラムのモデレーターです。

現在、4 日間の ActivityPub カンファレンス が開催されており、通常よりもフォーラムでの活動が増えています。今朝、URL から直接アクセスしたフォーラムのメインページが、完全に空白の画面(HTML が返されていない)で表示されていることに気づきました。

ただし、Spritely Project: The Super Exciting Future Of Fediverse - ActivityPub - SocialHub のようなディープリンクは正常に動作し、検索や管理パネルなどの他の機能にもアクセスできます。左上のロゴをクリックすると、空白の画面の代わりに 404 ページが表示されます。

サーバー管理に関わる人々に通知しましたが、サーバーの再起動で解決するかもしれません。しかし、これがより深刻な問題である可能性を考慮し、ご意見をお聞かせいただければ幸いです。今日から始まるカンファレンスのトークまでに、フォーラムを復旧させるためです。

追伸: フォーラムは v2.6.0.beta1 で動作しています。

リソースの使用状況を確認することをお勧めします。訪問者が増えると、より多くのリソースが使用されることになります。

サーバーのリソースを増やすことで、増加した訪問者に対応できます。

「いいね!」 1

ありがとうございます!サーバー管理者はまだオンラインではありませんが、このリンクを伝えておきました :slight_smile:

こんにちは。最新版へのアップグレードを行いましたが、効果がなく、昨日追加した Force Mobile Homepage コンポーネントを無効化しようと試みました。

さらに詳しいご助言をいただけますと幸いです。関連するエラーについてログを確認いたします…

コンテナ内からホームページを呼び出した際の状況は以下の通りです:

Started GET "/" for 37.172.69.223 at 2020-10-04 07:32:15 +0000
Processing by CategoriesController#index as HTML
Completed 404 Not Found in 281ms (ActiveRecord: 0.0ms | Allocations: 67648)
ActiveRecord::RecordNotFound (Couldn't find all Users with 'id': (36, 50) (found 1 results, but was looking for 2).)
lib/plugin/instance.rb:259:in `public_send'
lib/plugin/instance.rb:259:in `block (2 levels) in add_to_class'
(eval):48:in `_fast_attributes'
lib/freedom_patches/ams_include_without_root.rb:57:in `include!'
app/controllers/categories_controller.rb:61:in `block (2 levels) in index'
app/controllers/categories_controller.rb:40:in `index'
app/controllers/application_controller.rb:354:in `block in with_resolved_locale'
app/controllers/application_controller.rb:354:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:68:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:336:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:22:in `call'
lib/middleware/request_tracker.rb:176:in `call'
「いいね!」 1

つまり、ホームページの設定を「カテゴリと最新」から「カテゴリと注目の記事」に変更すると、ホームページへのアクセスが復元されました。当面はこれで対応しましょう…コンポーネント間の相互作用が何か関係しているような気がしますが、様子を見てみます。さらに詳しい情報があれば、ぜひお聞かせください。ショーは続きます :slight_smile:

「いいね!」 1

あなたの問題は、最新の投稿を読み込む際に 404 エラーが発生する点のようです。

誰かがこの名前を変更しましたか?

設定に入り、「最新」を探して確認してみてください。

@IAmGav さん、ご提案ありがとうございます。「Latest」に関連する文字列のカスタマイズ機能は現在ありません。

実際、いくつかのページが破損したままになっています。特に必要なカテゴリも含まれており、困った状況です :frowning:

強制モバイル用ホームページコンポーネントのコードを踏まえると、setDefaultHomepage(settings.homepage); に関連してデータベース内で何らかの変更があったかどうかを確認する方法に興味があります。しかし、それはカテゴリには影響しないと思うので、他に原因があるはずです。


直ちにログをクリアして、現在のエラーが実際にログに記録されていないことを確認しました。どうやら /latest/top、および #meeting カテゴリにバグがあるようです。何が起きているのか分かりません…コンテナ内のログも確認して、さらに情報を集めています…おそらく #meeting カテゴリ内の何らかの不具合のある投稿が原因ではないでしょうか…

問題の根源は ActiveRecord::RecordNotFound (Couldn't find all Users with 'id': (36, 50) (found 1 results, but was looking for 2).) のようです。

該当する ID はマージされたユーザーアカウントに一致していますが、そのプロセスが何らかの理由で破損しているようです…

私もこれが問題だと思います。専門家ではありませんが、存在しなくなった古いアカウントを参照する投稿があるのかもしれません(「人気」「最新」「カンファレンス」カテゴリに表示されています)。もしこれが問題であれば、その投稿を削除するか、投稿内のユーザーIDを更新するSQLクエリを実行する方法が考えられます。構文はどのようになりますか?

管理者アクションの「ユーザー統合」フィルターにはログが表示されません。統合プロセスが何らかの原因で失敗したと思われます。@チーム 失敗したユーザー統合を調査・解決するにはどうすればよいでしょうか?結果は問題なさそうです。ユーザーアカウントは両方のメールアドレスで存在しています。どこかの投稿に未解決のIDが残っているはずです…

OK、問題を単一のトピックに絞り込むことができました…

「いいね!」 1

これが役立つかもしれません

いいえ、(ソース) ユーザーが存在しないと表示されています。ステップ DiscourseEvent.trigger(:merging_users, @source_user, @target_user) が完了しなかったのではないかと推測します。コードはどこで見つかりますか?

さあ始めましょう…

[39] pry(main)> PostReplyKey.where(user_id: 36)
=> [#<PostReplyKey:0x0000558954b92d68 id: 9793, user_id: 36, post_id: 3409, reply_key: "00257885-fe73-e76d-09fb-f0f708c2f032", created_at: Sat, 03 Oct 2020 19:37:20 UTC +00:00, updated_at: Sat, 03 Oct 2020 19:37:20 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6e78 id: 9120, user_id: 36, post_id: 3174, reply_key: "b726e441-1c6c-bd60-27ac-8d8d5feef3d7", created_at: Fri, 02 Oct 2020 14:21:48 UTC +00:00, updated_at: Fri, 02 Oct 2020 14:21:48 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6db0 id: 9802, user_id: 36, post_id: 3413, reply_key: "86e179a1-7516-616c-1040-c26c0539f39d", created_at: Sat, 03 Oct 2020 19:41:36 UTC +00:00, updated_at: Sat, 03 Oct 2020 19:41:36 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6ce8 id: 9821, user_id: 36, post_id: 3418, reply_key: "573f48a4-8263-4759-44f0-f6cb26b66f38", created_at: Sat, 03 Oct 2020 20:37:40 UTC +00:00, updated_at: Sat, 03 Oct 2020 20:37:40 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6c20 id: 9822, user_id: 36, post_id: 3419, reply_key: "9371479c-eeb4-1009-176d-761a854a4ddb", created_at: Sat, 03 Oct 2020 20:40:08 UTC +00:00, updated_at: Sat, 03 Oct 2020 20:40:08 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6b58 id: 9400, user_id: 36, post_id: 3245, reply_key: "e1cd57aa-a811-21f9-5e24-84439e184a8e", created_at: Fri, 02 Oct 2020 21:35:12 UTC +00:00, updated_at: Fri, 02 Oct 2020 21:35:12 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6a90 id: 8613, user_id: 36, post_id: 3067, reply_key: "407edb15-e89d-4369-9fee-1e5eab83385d", created_at: Wed, 30 Sep 2020 13:50:17 UTC +00:00, updated_at: Wed, 30 Sep 2020 13:50:17 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd69c8 id: 9517, user_id: 36, post_id: 3288, reply_key: "140a48d2-1a40-d429-f6e2-2bbe37b4865d", created_at: Sat, 03 Oct 2020 09:54:40 UTC +00:00, updated_at: Sat, 03 Oct 2020 09:54:40 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6900 id: 9736, user_id: 36, post_id: 3388, reply_key: "76cacf9b-5353-0653-806d-f3c2df6689eb", created_at: Sat, 03 Oct 2020 18:37:11 UTC +00:00, updated_at: Sat, 03 Oct 2020 18:37:11 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6838 id: 8643, user_id: 36, post_id: 3011, reply_key: "6d384213-98db-652c-89eb-1979731bb311", created_at: Wed, 30 Sep 2020 20:55:31 UTC +00:00, updated_at: Wed, 30 Sep 2020 20:55:31 UTC +00:00>,
 #<PostReplyKey:0x0000558954bd6770 id: 9772, user_id: 36, post_id: 3400, reply_key: "1e9e0b2e-ecd6-3654-d0da-6e01982a890f", created_at: Sat, 03 Oct 2020 19:22:38 UTC +00:00, updated_at: Sat, 03 Oct 2020 19:22:38 UTC +00:00>]

それで、これに対してどうすべきか考えてみました… 既存のユーザーに付与しても何も解決しません。削除しても何も解決しません。

次のステップ:関連するトピックを新規に再構築し、古いものを破棄して、何が起きるか見てみます… より良いアイデアが出てこない限りは。

「いいね!」 1

PostReplyKey はメールの返信先アドレスを指し、トピック一覧のレンダリングには影響しません。

スタックトレースを確認すると、TopicListSerializer のダンプ処理中にエラーが発生しており、その原因は lib/instance/public.rb 内にあるようです。

古いユーザー ID のトピックの注目のユーザー一覧(ホームページに表示されるアバター群)を確認してみてください。

「いいね!」 1

@riking さん、ご返信ありがとうございます。私の知る限り、PostReplyKey 以外にこの欠落したユーザー ID の言及はありません。ただし、元のユーザー ID が何であるか不明なため、これが実際の古いユーザー ID ではない可能性もあります。どのようにしてそれを見つけるべきか、あるいはログから何を grep すべきか、ご教示いただけますでしょうか?

トピックの注目ユーザーの場合、このクエリで該当するものを取得できます:

SELECT id
FROM topics
WHERE featured_user1 = 1234
OR featured_user2 = 1234
OR featured_user3 = 1234
OR featured_user4 = 1234
OR last_post_user_id = 1234

古いユーザーIDではクエリに結果が返らず、新しいユーザーIDでは1件のトピックが返されました。これは以前から問題視されていたトピックです。そのトピックを別のカテゴリに移動したところ、ActivityPub Conference 2020 - SocialHub カテゴリが再び表示されるようになりました。

おそらく、トピック951に関連するデータの中に、欠落しているユーザーID 36への参照がどこかに存在するのでしょうが、現時点では見つけることができていません。あるいは、ユーザー295に関して見落としている他の依存関係があるのでしょうか?

そのエラーのスタックトレースはありますか?

私が User merge failed, corrupted database entries due to third party plugin - #4 by hellekin に投稿し、その後コメントした内容以上のものではありません。

「いいね!」 1

ああ、User merge failed, corrupted database entries due to third party plugin - #4 by hellekin にあるスタックトレースを見落としていました。つまり、プラグインが原因で失敗しているのですね。おそらく、あなたのプラグインのいずれかが、マージされていない何らかのユーザー情報を保存していたのでしょう。インストールされているプラグインのリストをいただけますか?

「いいね!」 2