PushFixTopicEmbedAuthorsJob のマイグレーション失敗のデバッグを手伝ってください

なるほど、それは理にかなっています :+1:

少なくとも既存のインスタンスでは、追加されたプラグインがデフォルトで有効になっていない限り、すべて問題ありません。しかし、gem の依存関係の変更と、私たちが直面した複数のデータベース移行の失敗に関しては、何かが目に見えない形で壊れているか失われているのではないかと少し心配しています。残念ながら、再構築ではこれらの点に関するログは一切出力されず、「cd /var/www/discourse && su discourse -c ‘bundle exec rake db:migrate’」がエラーコードで終了したとだけ表示され、詳細やログにも何も表示されません :thinking:

これは奇妙ですね。PGを別のコンテナで実行していますか?pgvectorはインストールされていますか?

一般的に、何かが失敗した場合、少し上にスクロールするとエラーが見つかります。シーケンスのため、エラーは100行上にあることが多いです。

単独のDiscourse Dockerコンテナです。また、完全に正確ではありませんでした。実際にはそれに関する追加の出力がありますが、意味をなすほどのものではありませんでした。

/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.2/lib/active_record/migration.rb:1454:in `migrate' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.2/lib/active_record/migration.rb:1261:in `up’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.2/lib/active_record/migration.rb:1236:in `migrate' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.2/lib/active_record/tasks/database_tasks.rb:270:in `migrate’
/var/www/discourse/lib/tasks/db.rake:267:in `block (2 levels) in <main>’ /var/www/discourse/lib/distributed_mutex.rb:53:in `block in synchronize’
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize' /var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize’
/var/www/discourse/lib/distributed_mutex.rb:34:in `synchronize' /var/www/discourse/lib/tasks/db.rake:242:in `block in ’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.3.0/exe/rake:27:in `<top (required)>' /usr/local/bin/bundle:25:in `load’
/usr/local/bin/bundle:25:in `’
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
I, [2025-07-29T20:36:15.074727 #1]  INFO – : == 20180828095129 PushFixTopicEmbedAuthorsJob: migrating ==========
== 20180828095129 PushFixTopicEmbedAuthorsJob: migrated (0.0021s) =============

I, [2025-07-29T20:36:15.075331 #1]  INFO – : Terminating async processes
I, [2025-07-29T20:36:15.075355 #1]  INFO – : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main pid: 45
I, [2025-07-29T20:36:15.075376 #1]  INFO – : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 112
2025-07-29 20:36:15.075 UTC [45] LOG:  received fast shutdown request
112:signal-handler (1753821375) Received SIGTERM scheduling shutdown…
2025-07-29 20:36:15.091 UTC [45] LOG:  aborting any active transactions
2025-07-29 20:36:15.092 UTC [45] LOG:  background worker “logical replication launcher” (PID 59) exited with exit code 1
2025-07-29 20:36:15.092 UTC [54] LOG:  shutting down
2025-07-29 20:36:15.105 UTC [54] LOG:  checkpoint starting: shutdown immediate
112:M 29 Jul 2025 20:36:15.125 # User requested shutdown…
112:M 29 Jul 2025 20:36:15.125 * Saving the final RDB snapshot before exiting.
112:M 29 Jul 2025 20:36:15.247 * DB saved on disk
112:M 29 Jul 2025 20:36:15.247 # Redis is now ready to exit, bye bye…
2025-07-29 20:36:15.273 UTC [54] LOG:  checkpoint complete: wrote 10 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.066 s, sync=0.046 s, total=0.181 s; sync files=9, longest=0.026 s, average=0.006 s; distance=36 kB, estimate=36 kB
2025-07-29 20:36:15.276 UTC [45] LOG:  database system is shut down

## FAILED

Pups::ExecError: cd /var/www/discourse &amp;&amp; su discourse -c ‘bundle exec rake db:migrate’ failed with return #<Process::Status: pid 635 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/exec_command.rb:131:in `spawn’
`exec failed with the params {“cd”=>“$home”, “tag”=>“migrate”, “hook”=>“db_migrate”, “cmd”=>[“su discourse -c ‘bundle exec rake db:migrate’”]}’
`bootstrap failed with exit code 1`
`** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.`
`./discourse-doctor may help diagnose the problem.`

ちなみに、コードブロックとフェンスがここで壊れています。バックスラッシュを手動で追加しても、エディタのコードボタンを押しても機能しません。選択されていない部分までコードに変換してしまいます。

興味深いことに、これは移行です。

これは、私たちが従うべきではないパターンに従っています。

誰かに確認してもらいます!

「いいね!」 1

プラグインが存在せず、有効にもなっていない状態で移行を試みたということですか? 再ビルドを複数回試行した後に成功した理由について、何か考えはありますか?

もうすべて正常に動作しているのですか?

なぜ失敗したのか少し混乱していますが、問題はここにあります。マイグレーションからアプリケーションコードを呼び出しており、これは非常に脆弱です。

はい、お伝えした通り、複数の再構築を試みた後、最終的に完了しました。最後に成功したログでは、この特定移行がまったく実行されていないことがわかります。おそらく、失敗したにもかかわらず「移行済み」とマークされたため、次の再構築では試行されなくなったのでしょう。

マイグレーションでRedisにキーが設定されました。失敗の潜在的な原因として、RSSプラグインのコードがロードされていなかった可能性があります。他の人がこの問題に遭遇しないように、原因を特定します。

「いいね!」 2

ここで根本的な問題を修正します。

「いいね!」 2