갑자기 부트스트래핑이 실패합니다

의식적으로 아무것도 변경하지 않았는데, 오늘 git pull을 실행하고 web_only.yml로 부트스트랩을 시도하니, 부트스트랩 프로세스가 시작된 지 약 90초 후에 오류가 발생합니다. 진단에 도움이 될 수 있기를 바라며, 오류의 마지막 부분만 붙여넣습니다:

/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bootsnap-1.15.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bootsnap-1.15.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/zeitwerk-2.6.6/lib/zeitwerk/kernel.rb:38:in `require'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.3.1/lib/rails/application.rb:348:in `require_environment!'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.3.1/lib/rails/application.rb:511:in `block in run_tasks_blocks'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => db:migrate => db:load_config => environment
(See full trace by running task with --trace)
I, [2022-12-29T10:28:07.806753 #1]  INFO -- : gem install geocoder -v 1.4.4 -i /var/www/discourse/plugins/discourse-locations/gems/3.1.3 --no-document --ignore-dependencies --no-user-install
Successfully installed geocoder-1.4.4
1 gem installed



FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 1066 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.1.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "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.
9b7ac0c88b42b2aa1eccb9ef291527f4afd8b71861669af66ab79dee5ed82a45

이전에는 성공적으로 부트스트랩이 완료되었던 동일한 yml 파일이 왜 이제 부트스트랩을 허용하지 않는지 이해할 수 없습니다. 제 사이트는 정상적으로 작동하고 있습니다.

'Discourse-Doctor’에서도 'error’를 찾을 수 없었습니다 (discourse doctor 결과 파일에서 'error’라는 단어만 검색할 수 있었는데, 해당 파일에는 없었습니다). 물론 저는 전문가가 아니지만요.

locations 플러그인을 제거해 보세요.

정확히 맞췄네요. 이제 웹 컨테이너를 완전히 정상적으로 부트스트랩할 수 있습니다!!! 정말 감사합니다. 이번이 몇 번째인지 모르겠네요.


하지만 이제 이전까지 설정해 두었던 다른 게시물과 사용자들의 '매핑/위치’가 전부 사라졌습니다.

다른 대안이 있을까요? 해당 플러그인 관련 주제에서 더 찾아봐야 한다는 걸 알고 있고, 찾아야 할 것입니다. 하지만 간단히 말해서, 이 문제에 대한 해결책이 있을까요?

시간입니다. 앞으로 1~2주 안에 수정될 것이라고 확신합니다.

어제 ‘location’ 플러그인을 비활성화한 후 web_only 컨테이너를 정상적으로 다시 구축할 수 있었습니다. 하지만 오늘, 모든 플러그인을 하나씩 비활성화해도 부트스트랩이 여전히 실패하고 있습니다.

Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile' failed with return #<Process::Status: pid 900 exit 137>
Location of failure: /usr/local/lib/ruby/gems/3.1.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'bundle exec rake themes:update assets:precompile'"]}
bootstrap failed with exit code 137
** 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.
2c5f01d5ca6b216e744e11547b121e64aac0ad5e37d64d2ec5e2f279fe766c6a

그럼에도 불구하고 제 사이트는 완벽하게 정상 작동하고 있습니다.

이 문제를 어떻게 해결할 수 있을까요? 방향을 잡아주실 수 있을까요?

앱을 다시 빌드할 수는 없지만 시작할 수는 있다는 건가요?

네, 컨테이너는 이미 시작되었고 웹사이트도 정상적으로 작동합니다. 하지만 동일한 컨테이너(web_only)를 재구축/부트스트랩하려고 하면 오류가 발생합니다. 어제는 같은 문제를 겪었을 때 ‘location’ 플러그인을 비활성화하니 성공적으로 부트스트랩할 수 있었지만, 오늘은 아무런 변경 사항 없이도 동일한 작업이 실패했습니다.

지금 사이트가 오프라인인 것 같습니다. 수정: 아니요, 다시 돌아왔습니다. 대부분이 힌디어로 되어 있어서 읽을 수 없네요.

확인차 묻습니다. 현재 app.yml 파일에서 플러그인이 하나도 활성화되어 있지 않나요? 전부 주석 처리되었거나 삭제된 상태인가요?

오류 코드 137은 메모리 부족을 의미합니다.

이것이 문제가 될 수 있을까요?
모든 플러그인을 끄더라도 Discourse가 이제 4GB 이상의 메모리가 필요한 것일까요?
같은 드롭렛/인스턴스에서 실행 중인 다른 2개의 WordPress 사이트는 거의 비활성 상태입니다.

8GB RAM 머신을 사용하는 것 외에 이 문제를 쉽게 해결할 수 있는 방법이 있을까요?

네, 현재 가용 메모리가 400MB뿐이라 Discourse를 다시 빌드할 수 없습니다. 메모리를 4~5GB로 늘리거나, 재빌드 전에 포럼을 종료한 뒤 다시 시도해 보세요.

400MB의 가용 메모리가 유휴 상태(idle)일 때의 값이라고 가정합니다. 재빌드는 시스템에 상당히 부하를 주는 작업이므로(제 사이트의 경우 Proxmox에서 확인해 볼 수 있지만, 지금은 잠시 오프라인 상태입니다), 유휴 상태일 때보다 더 많은 메모리가 필요합니다.

죄송하지만 그 의미를 잘 이해하지 못했습니다. 4~5GB를 더 늘려야 한다는 뜻인가요? 즉, 4GB에서 8GB나 9GB로 늘리라는 말씀이신가요?

제 포럼(즉, 웹사이트)을 어떻게 종료할 수 있나요?
그리고
메모리를 늘린 후에도 재구축 전에 웹사이트를 종료해야 한다는 말씀이신가요?

도움 주셔서 감사합니다.

메모리를 추가하기 전에 먼저 명령줄에서 다음을 실행해 보세요.

이는 표준 설치 환경을 전제로 합니다. /var/discourse 디렉토리에 있는지 확인하세요.

./launcher stop app && ./launcher rebuild app && ./launcher start app

맞아요!!

우분투 서버를 재부팅했는데, 덕분에 인스턴스에서 약 7~800MB의 여유 RAM을 확보할 수 있었고 부트스트랩도 성공했습니다. 원하는 플러그인을 활성화한 후에도 재빌드/부트스트랩이 성공하지 못했다면, 다음 BS 전에 컨테이너를 중지했을 거예요.

하지만 디스코스의 새로운 RAM 요구량에 깜짝 놀랐습니다. RAM을 4GB에서 8GB로 올리면 인스턴스/드로플릿 비용이 거의 두 배로 뛰거든요. 제 사이트는 매우 매우 매우 작은 사이트(하루 방문자 약 10명)인데, 이런 비용은 원치 않습니다. 이전에는 디스코스의 표준 설치에 RAM 1~2GB면 충분하다고 했었거든요.

무엇이 잘못되었는지 알아볼 수 있도록 도와주셔서 정말 감사합니다.

가능하다면 8GB 머신을 선택하는 것을 권장합니다. 2GB 머신은 더 작은 포럼을 위해 설계된 것이며, 귀하의 포럼은 콘텐츠가 상당히 많은 것으로 보입니다.

현재 제 서버는 4GB 메모리를 사용하고 있으며, 방문자 수는 아직 매우 적습니다. 향후 8GB로 업그레이드하는 것을 고려하고 있습니다. (6GB 옵션은 없거든요.)

참고로, 구글에서 몇몇 글들을 보면 빈 메모리(free memory)의 양은 크게 중요하지 않다고 합니다. 이 메모리는 아무것도 하지 않는, 일종의 낭비된 메모리이기 때문이죠. 대신 필요할 때 사용할 수 있는 '가용 메모리(available memory)'를 확인하는 것이 더 좋다고 합니다. 제 경우 가용 메모리는 1.4GB입니다.

이 부분도 혹시 조언을 주실 수 있을까요?

1.4GB의 사용 가능한 메모리를 시스템이 어떻게 사용하고 있나요?

위 스크린샷/기사가 설명하듯, 'available’에는 ‘버퍼 메모리’ 등이 포함되며, 필요 시 시스템에서 사용할 수 있는 상태가 될 수 있습니다. 하지만 저는 이 분야에 대해 전문가가 아닙니다.

여전히 이 부분에 대해 조사 중입니다(다시 말하지만, 저는 전문가가 아닙니다). 제 추측으로는 거의 사용하지 않는다고 보는 다른 두 개의 워드프레스 웹사이트가 이 문제와 관련이 있을 수 있습니다. 시간이 나면 그들을 꺼본 후 성능을 비교해 볼 예정입니다.

현재로서는 더 높은 리소스로 업그레이드하여 매달 거의 두 배의 비용을 지불하지 않고도 재빌드 문제를 해결했습니다. 감사합니다.

그래서 그건 좋은 생각이 아닙니다.

또한 스왑을 설정하는 것도 좋은 아이디어입니다.

스와프 공간(swap space)을 추가할 수 있습니다. 리빌드에는 많은 RAM이 필요합니다. 또한 서버에서 Discourse 외에 다른 프로그램이 실행되고 있으므로 최소 요구 사양보다 더 많은 메모리가 필요합니다. 다른 사이트들이 트래픽을 받지 않고 있더라도, 다른 웹 서버가 실행 중이면 일부 메모리를 사용하게 됩니다.