재빌드 중 오류 발생

Docker 27.0를 사용하여 다음 플러그인 구성을 적용했습니다.

cmd:
- git clone https://github.com/discourse/docker_manager.git
- git clone https://github.com/paviliondev/discourse-locations.git

그 후 ./launcher rebuild app 명령을 실행했습니다.

위치(Location) 플러그인에 대해 다음과 같은 오류가 발생합니다.

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 449 e
xit 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:migra
te'"]}
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.

조언을 부탁드립니다.

어떤 마이그레이션이 실패했는지 확인해 보세요.

원래 게시글에서 언급했듯이
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate’ failed with return #<Process::Status: pid 449 e
xit 1>

그리고 로그의 더 위쪽을 보면, 마이그레이션이 완료되는 시점에 해당 내용이 출력되므로, 문제를 일으킨 마이그레이션을 찾아야 합니다.

oO0OoO0OoO0Oo Redis 시작 중 oO0OoO0OoO0Oo
Redis 버전=7.0.15, 비트=64, 커밋=00000000, 수정됨=0, pid=447, 방금 시작됨
설정 로드됨

  • 단조 증가 시계: POSIX clock_gettime
    경고: 서버 TCP 리스닝 소켓 *:6379 생성 실패: bind: Address already in use
    포트 6379(TCP) 리스닝 실패, 중단됩니다.

cd /var/www/discourse && su discourse -c bundle exec rake db:migrate rake 중단됨!
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 peeraddr=xx.xx.xx.xx:443 state=error: unexpected eof while reading (OpenSSL::S
SL::SSLError)

에러의 원인은 로케이션(위치) 플러그인 라인입니다.

- git clone  https://github.com/paviliondev/discourse-locations

위에서 제가 보여준 라인처럼 ".git"를 제거하세요.

https://github.com/paviliondev/discourse-locations

플러그인의 GitHub 링크에는 .git가 없습니다. Docker의 첫 번째 라인에는 ".git"가 있지만, 플러그인은 단순히 링크 주소일 뿐입니다.

로그를 위로 스크롤하면 로케이션 플러그인 라인 관련 오류를 볼 수 있을 것입니다. 공유해 주신 그 에러는 저도 발생하지만, 재빌드 과정에는 영향을 주지 않습니다.

이것은 아무 영향도 미치지 않습니다 - 두 가지 모두 동일한 결과를 제공합니다

아, 몰랐네요. 제 인스턴스의 app.yml 파일을 확인하다가 docker 줄에만 “.git” 확장자가 붙어 있는 것을 발견했고, 이런 파일 구성이 얼마나 민감한지 경고받은 기억이 나서요.

설명해 주셔서 감사합니다.

app.yml의 1:1 사본이라면 git 라인이 잘못된 위치에서 시작됩니다. d 아래에 있어야 합니다.

cmd:
  - git…

그렇다면 제 질문은, URL에 .git가 포함된 다른 플러그인들은 어떻게 정상적으로 작동하는가입니다. 예를 들어, 캘린더와 뉴스 플러그인은 우리가 평소 git 명령을 적용하는 방식대로 .git가 포함된 URL에서도 잘 작동했습니다. .git가 차이를 만드는지에 대해 조금 설명해 주실 수 있을까요?

마이그레이션이 실패하는 것을 확인했고, 포트 관련 문제도 표시되고 있는데, 왜 그런지 모르겠어요?

@supermathie 님이 제 답변에 대해 남긴 댓글을 보셨다면, 제가 틀렸다는 걸 아실 것입니다. 제 app.yml 설정을 근거로 말씀드렸는데, 사실 레이아웃이 어느 쪽이든 문제가 없는 것 같습니다.

전에 게시하신 포트 오류에 대해서는 걱정하지 마셔도 됩니다. 저도 그런 오류가 뜨지만 정상적으로 재빌드됩니다. locations 플러그인을 제거한 후 재빌드해 보시고 여전히 실패하는지 확인해 보세요.

실패할 경우, 최종 실패 메시지 위에 상당 부분의 출력을 캡처하도록 스크롤을 올려 보세요. 플러그인 설치 문제이거나 다른 문제라면 오류 메시지가 있을 것입니다.

app.yml을 편집할 때 Fike처럼 공백이나 기타 기호가 잘못 삽입되었을 수도 있습니다. app.yml 파일을 수정하기 전에 내용을 백업해 두는 것이 좋은 습관입니다. 실패할 경우 구버전과 새 버전을 비교할 수 있으며, 필요하면 줄 단위로 비교할 수도 있습니다.

저는 보통 재빌드할 때마다 과정을 지켜보며, 재빌드에 영향을 주지 않는 일반적인 오류/경고 메시지에 익숙해져 있습니다.

꽤 오래전에 플러그인 관련 실패가 있었는데, 제 경우 그 당시에는 Chat이 코어에 병합된 업데이트를 누락했기 때문이었습니다.

여기서 다른 분들이 재빌드 로그 파일을 더 많이 확인해야 실패 지점을 파악하는 데 도움이 될 것입니다.

실패 결과에서 제안하듯 discourse-doctor를 실행하는 것도 도움이 될 수 있습니다. 하지만 제 경험상 스크롤을 위로 올리는 것이 가장 효과적인 방법이었습니니다.

app yml의 하단 부분 또는 전체를 복사해서 여기에 붙여넣으셔도 됩니다. 다만 메일 제공자 라인, maxmind 정보 등 민감한 정보는 편집하여 제거해 주세요. 플러그인 영역에 문제가 있다고 의심하시므로… $home 이하의 하단 부분만 복사하셔도 몇 가지 통찰을 얻을 수 있을 것입니다.

이 줄도 확인하고 있으며, 제 2번째 VM에서도 위치 플러그인에 한해서 동일한 문제가 발생한다는 것을 확인했습니다.
Caused by:
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 peeraddr=184.104.226.109:443 state=error: unexpected eof while reading (OpenSSL::SSL::SSLError)
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:46:in connect_nonblock' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:46:in ssl_socket_connect’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-http-0.6.0/lib/net/http.rb:1742:in `connect’

app.yml에서 위치 플러그인을 제거한 후 다시 빌드해 볼 수 있을까요?

여기서 언급된 대로 파일의 들여쓰기를 확인해 보셨나요?

위치 제외하고 모두 정상 작동합니다

로버트가 곧 로케이션 플러그인 문제를 살펴볼 것이라고 생각합니다. 최근 디스커스 버전에서 비추천(deprecation)을 수정하기 위한 PR에서 오류를 발견했는데, 로버트는 곧 확인하겠다고 말씀하셨습니다.

이 정보를 알려주셔서 감사합니다. 문제가 해결되는 대로 알림을 받을 수 있기를 바랍니다.

감사합니다.

우선적으로 이 문제를 조사해 보고 예산도 있다면 #marketplace에 게시물을 올려 주세요. 다만, gem 버전/호환성 관련 문제로 보입니다.

하지만 지난 주에 Docker 24.0.x에 동일한 플러그인을 추가했을 때 정상적으로 작동했으며, 여기는 Docker 27.0.x로 유일한 차이점입니다.

그 뉴스 플러그인도 고장 났어요.