./launcher rebuild app 오류 (Process::Status: pid 2096) 해결 못 해서 질문

오늘 ./launcher rebuild app 명령을 실행했을 때(원인을 알 수 없는) 다음과 같은 오류가 발생합니다. (참고로, app.yml 파일에서 모든 플러그인을 비활성화한 상태입니다)… 이 문제에 대한 도움을 주시면 감사하겠습니다!

error-log_2024-10-31_1.txt (44.1 KB)

마지막 부분은 다음과 같습니다…

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 2096 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132: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 **

로그의 관련 부분은 다음과 같습니다.

undefined method `+' for nil
/var/www/discourse/db/migrate/20241025045928_add_invites_link_to_sidebar.rb:44:in `up'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.4.2/lib/active_record/migration.rb:989:in `public_send'

따라서 FEATURE: Add invite link to the sidebar (#29448) · discourse/discourse@19672fa · GitHub (cc @osama)와 관련이 있는 것으로 보입니다.

정말 감사해요 (설명도 감사해요). 저도 그걸 봤는데, 혹시 그게 아닐까 싶었거든요!

@denvergeeks 마이그레이션을 수정할 건데, 사이트가 이런 상태가 된 과정이 좀 궁금하네요. 사이트 사이드바는 어떻게 생겼나요? 데이터베이스에서 기본 사이드바의 모든 링크를 삭제한 건가요?

네 – 사이드바나 사이트의 스크린샷은 없지만, '더 보기…'에 몇 가지 기본 메뉴 항목을 추가한 것 외에는 아무것도 수정하지 않았습니다.

이것은 제 (비공개) 개인 연구용 Discourse 인스턴스 중 하나이므로, 커맨드 라인에서 무엇을 실행해야 하는지 알려주시면 디버깅을 도와드릴 수 있습니다. (도움이 된다면 전용 서버도 하나 있습니다.)

아래 쿼리들이 데이터베이스에서 어떤 결과를 반환하는지 알려주실 수 있나요?

SELECT id FROM sidebar_sections WHERE section_type = 0;
SELECT linkable_type, linkable_id, position FROM sidebar_section_links WHERE sidebar_section_id IN (SELECT id FROM sidebar_sections WHERE section_type = 0);
SELECT id, segment FROM sidebar_urls WHERE id IN (SELECT linkable_id FROM sidebar_section_links WHERE sidebar_section_id IN (SELECT id FROM sidebar_sections WHERE section_type = 0));

물론이죠 - 시작/프롬프트부터 명령어를 제공해 주시겠어요? (저는 루트 사용자입니다)

정확한 명령어를 바로 떠올리지는 못하지만, 여기 Meta에서 찾아본 결과 아래 명령어들이 작동할 것 같습니다:

./launcher enter app
su postgres
psql

psql 명령을 실행한 후에는 쿼리를 붙여넣고 실행하여 결과를 확인할 수 있습니다. 명령어가 작동하지 않으면 알려주세요.

root@JEN /var/discourse # ./launcher enter app101
su postgres
psql
x86_64 arch detected.
Error response from daemon: container 8ee36bdfa85b786ea149e6714f65048e136091fe31be2f5425be5fe04a852729 is not running
su: user postgres does not exist or the user entry does not contain all the required fields
Command 'psql' not found, but can be installed with:
apt install postgresql-client-common

음, 컨테이너가 실행되지 않는 것 같습니다. 현재 사이트가 다운되어 있나요? 다음을 시도해 보세요:

./launcher start app101
root@JEN /var/discourse # ./launcher start app101
x86_64 아키텍처가 감지되었습니다.

기존 컨테이너를 시작하는 중
+ /usr/bin/docker start app101
app101
root@JEN /var/discourse # ./launcher enter app101
su postgres
psql
x86_64 아키텍처가 감지되었습니다.
root@JEN-app101:/var/www/discourse# SELECT id FROM sidebar_sections WHERE section_type = 0;
bash: SELECT: 명령을 찾을 수 없습니다
root@JEN-app101:/var/www/discourse#

사이트가 시작되었고, 사이드바와 …더 많은 항목이 있습니다

아, 이제 이해가네요. 마이그레이션은 ... 더 보기 외부에 최소 1개의 링크를 기대하는데, 그런 링크가 없어서 오류가 발생하는 거군요. 이 경우를 처리하도록 마이그레이션을 업데이트하겠습니다.

다른 사이트 하나에서도 동일한 오류(그리고 컨테이너 정지)가 발생했습니다. (다른 일부 사이트에서는 발생하지 않았습니다.)

수정: 네, 동일한 동작을 발견했던 다른 사이트도 ... 더 보기 밖에 링크가 없습니다.

그러면 이제 끝인가요?

The image is a blurry, low-resolution photograph of a young child's face, with the child looking directly at the camera and smiling. (Captioned by AI)

죄송합니다 @denvergeeks, 개인적으로 급한 일이 생겨서 몇 시간 동안 자리를 비웠습니다. 수정 사항을 담은 PR을 준비했습니다:

머지(merge)되고 테스트가 통과되면 알려드리겠습니다.

@denvergeeks, 수정 사항이 tests-passed 브랜치에 반영되었습니다. 이제 다시 빌드하면 성공해야 합니다.