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 <main>'
/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 `<main>'
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 && 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.

흥미롭게도 이것은 마이그레이션입니다.

이것은 우리가 정말로 따서는 안 되는 패턴을 따르고 있습니다.

누군가 이 문제를 살펴보게 하겠습니다!

즉, 이전에는 존재하지 않았고 활성화되어 있지도 않은 플러그인에 대해 마이그레이션을 시도한 건가요? 여러 번 재빌드한 후에 성공한 이유가 무엇인지 혹시 아시나요?

잠깐, 이제 전부 제대로 작동하나요?

왜 실패했는지에 대해서는 약간 혼란스럽지만, 여기에서 문제를 확인할 수 있습니다. 마이그레이션에서 애플리케이션 코드를 호출하고 있는데, 이는 매우 취약한 구조입니다.

네, 말씀드린 대로 여러 번 재빌드를 시도한 끝에 마침내 성공했습니다. 마지막 성공 로그에서는 해당 마이그레이션이 아예 실행되지 않은 것으로 보입니다. 실패했음에도 불구하고 “migrated” 상태로 표시되었기 때문에, 다음 재빌드에서는 다시 시도되지 않았을 가능성이 큽니다.

이전 작업은 단순히 Redis에 키를 설정하는 것이었습니다. 실패한 잠재적인 이유는 RSS 플러그인의 코드가 해당 시점에 로드되지 않았을 수 있다는 것입니다. 다른 사용자들도 동일한 문제를 겪지 않도록 원인을 추적하겠습니다.

여기서 근본적인 문제를 수정할 것입니다.