업데이트 시도 후 충돌

관리자 패널을 통해 Discourse 업데이트를 시도한 후 프로세스가 충돌하여 포럼이 로드되지 않았습니다. 다행히 이 문제를 해결하는 방법이 있습니다. :slight_smile:

서버에서 터미널을 열고 다음 명령을 실행하세요:

cd /var/discourse

./launcher rebuild app

재구성이 완료된 후 제 환경에서는 모든 것이 정상으로 돌아왔고 포럼이 업데이트되었습니다. 이 문제는 Discourse 플러그인과 관련되어 있으므로, 원인이 된 오류 로그도 함께 남겨 두겠습니다.

로그

Compiling 46 plugins…
rake aborted!
AssetProcessor::TimeoutError: [PLUGIN discourse-doc-categories] Script terminated: timeout after 120s (AssetProcessor::TimeoutError)
/var/www/discourse/lib/plugin/js_compiler.rb:32 ‘Plugin::JsCompiler#compile!’
/var/www/discourse/lib/plugin/js_manager.rb:136 ‘Plugin::JsManager#compile_js_bundle’
/var/www/discourse/lib/plugin/js_manager.rb:57 ‘block in Plugin::JsManager#compile!’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:689 ‘Parallel.call_with_index’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:659 ‘Parallel.process_incoming_jobs’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:638 ‘block in Parallel.worker’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:629 ‘Process.fork’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:629 ‘Parallel.worker’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:619 ‘block in Parallel.create_workers’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Array#each’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Enumerable#each_with_index’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Parallel.create_workers’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:557 ‘Parallel.work_in_processes’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:304 ‘Parallel.map’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:248 ‘Parallel.each’
/var/www/discourse/lib/plugin/js_manager.rb:56 ‘Plugin::JsManager#compile!’
/var/www/discourse/lib/tasks/assets.rake:27 'block in ’

Caused by:
AssetProcessor::TimeoutError: Script terminated: timeout after 120s (AssetProcessor::TimeoutError)
/var/www/discourse/lib/asset_processor.rb:185 ‘MiniRacer::Context#call’
/var/www/discourse/lib/asset_processor.rb:185 ‘block in AssetProcessor.v8_call’
/var/www/discourse/lib/asset_processor.rb:184 ‘Thread::Mutex#synchronize’
/var/www/discourse/lib/asset_processor.rb:184 ‘AssetProcessor.v8_call’
/var/www/discourse/lib/asset_processor.rb:264 ‘AssetProcessor#rollup’
/var/www/discourse/lib/plugin/js_compiler.rb:21 ‘Plugin::JsCompiler#compile!’
/var/www/discourse/lib/plugin/js_manager.rb:136 ‘Plugin::JsManager#compile_js_bundle’
/var/www/discourse/lib/plugin/js_manager.rb:57 ‘block in Plugin::JsManager#compile!’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:689 ‘Parallel.call_with_index’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:659 ‘Parallel.process_incoming_jobs’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:638 ‘block in Parallel.worker’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:629 ‘Process.fork’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:629 ‘Parallel.worker’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:619 ‘block in Parallel.create_workers’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Array#each’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Enumerable#each_with_index’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Parallel.create_workers’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:557 ‘Parallel.work_in_processes’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:304 ‘Parallel.map’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:248 ‘Parallel.each’
/var/www/discourse/lib/plugin/js_manager.rb:56 ‘Plugin::JsManager#compile!’
/var/www/discourse/lib/tasks/assets.rake:27 'block in ’

Caused by:
MiniRacer::ScriptTerminatedError: terminated (MiniRacer::ScriptTerminatedError)
/var/www/discourse/lib/asset_processor.rb:185 ‘MiniRacer::Context#call’
/var/www/discourse/lib/asset_processor.rb:185 ‘block in AssetProcessor.v8_call’
/var/www/discourse/lib/asset_processor.rb:184 ‘Thread::Mutex#synchronize’
/var/www/discourse/lib/asset_processor.rb:184 ‘AssetProcessor.v8_call’
/var/www/discourse/lib/asset_processor.rb:264 ‘AssetProcessor#rollup’
/var/www/discourse/lib/plugin/js_compiler.rb:21 ‘Plugin::JsCompiler#compile!’
/var/www/discourse/lib/plugin/js_manager.rb:136 ‘Plugin::JsManager#compile_js_bundle’
/var/www/discourse/lib/plugin/js_manager.rb:57 ‘block in Plugin::JsManager#compile!’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:689 ‘Parallel.call_with_index’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:659 ‘Parallel.process_incoming_jobs’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:638 ‘block in Parallel.worker’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:629 ‘Process.fork’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:629 ‘Parallel.worker’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:619 ‘block in Parallel.create_workers’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Array#each’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Enumerable#each_with_index’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Parallel.create_workers’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:557 ‘Parallel.work_in_processes’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:304 ‘Parallel.map’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:248 ‘Parallel.each’
/var/www/discourse/lib/plugin/js_manager.rb:56 ‘Plugin::JsManager#compile!’
/var/www/discourse/lib/tasks/assets.rake:27 'block in ’
Tasks: TOP => assets:precompile
(See full trace by running task with --trace)
/var/www/discourse/script/assemble_ember_build.rb:167 ‘Kernel#system’: Command failed with exit 1: bin/rake (RuntimeError)
from /var/www/discourse/script/assemble_ember_build.rb:167 ‘’
Docker Manager: FAILED TO UPGRADE
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:205 ‘DockerManager::Upgrader#run’
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:105 ‘DockerManager::Upgrader#upgrade’
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:19 'block in ’
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6 ‘Kernel#fork’
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6 ‘’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/commands/runner/runner_command.rb:44 ‘Kernel.load’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/commands/runner/runner_command.rb:44 ‘block in Rails::Command::RunnerCommand#perform’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/activesupport-8.0.5/lib/active_support/execution_wrapper.rb:91 ‘ActiveSupport::ExecutionWrapper.wrap’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/commands/runner/runner_command.rb:70 ‘Rails::Command::RunnerCommand#conditional_executor’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/commands/runner/runner_command.rb:43 ‘Rails::Command::RunnerCommand#perform’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/thor-1.5.0/lib/thor/command.rb:28 ‘Thor::Command#run’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/thor-1.5.0/lib/thor/invocation.rb:127 ‘Thor::Invocation#invoke_command’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/command/base.rb:178 ‘Rails::Command::Base#invoke_command’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/thor-1.5.0/lib/thor.rb:538 ‘Thor.dispatch’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/command/base.rb:73 ‘Rails::Command::Base.perform’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/command.rb:65 ‘block in Rails::Command.invoke’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/command.rb:143 ‘Rails::Command.with_argv’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/command.rb:63 ‘Rails::Command.invoke’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/commands.rb:18 ‘’
/usr/local/lib/ruby/3.4.0/bundled_gems.rb:82 ‘Kernel.require’
/usr/local/lib/ruby/3.4.0/bundled_gems.rb:82 ‘block (2 levels) in Kernel#replace_require’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/bootsnap-1.24.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:33 ‘Kernel#require’
bin/rails:18 ‘’
Spinning up 1 Pitchfork worker(s) that were stopped initially

커뮤니티에서 업데이트와 관련하여 여전히 문제를 겪고 계신 분은 여기에 댓글로 남겨주시면 도움을 드리겠습니다.

감사합니다 <3

2개의 좋아요

이게 바로 제가 관리자 UI에서 업데이트를 안 하는 이유입니다 :woman_shrugging:t2:

자체 호스팅 표준 설치 환경에서 업데이트를 하는 일반적인 방법입니다.

해결하시고 다시 정상적으로 돌아오셨다니 다행이네요. 포럼에 접속할 수 없는 상황을 좋아하는 사람은 없으니까요.

8개의 좋아요

2분 시간 제한 내에 빌드할 수 없었던 특정 플러그인인 것 같습니다.

@TroLLoBlogger 님, 서버 사양을 공유해 주시겠습니까?

5개의 좋아요

다른 의미라면 알려주세요 :smiley:

1개의 좋아요

호기심에, 스왑이 설정되어 있나요?

단일 vCPU가 문제가 될 수 있습니다.

3개의 좋아요

네, 가능합니다. 하지만 이틀 전에는 업데이트에 전혀 문제가 없었습니다. 저도 2GB 스왑을 설정해 보고 기다려 보겠습니다 :slight_smile:

sudo fallocate -l 2G /swapfile        
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

3개의 좋아요

음, 단일 vCPU로 웹 업데이트를 수행하면서 프론트엔드 자산 빌드의 복잡성까지 처리하는 것은 요즘 기준으로 다소 부담이 클 수 있겠네요.

@david 님은 어떻게 생각하시나요? 미리 빌드된 자산을 사용한다면 문제없이 작동할 텐데, 해당 조합에서는 웹 업데이트를 감지하고 비활성화해야 할 수도 있을 것 같습니다…

4개의 좋아요

웹 기반 업데이트를 사용하는 경우에도 사전 구축된 자산을 가져와야 합니다 (이들은 Docker 이미지와 별도로 배포됩니다).

doc-categories는 코어 플러그인이 아니므로 해당 플러그인의 자산을 배포하지 않습니다. 하지만… 매우 간단한 플러그인입니다. 120초는 처리에 걸리는 시간으로서는 매우 긴 시간이죠 :thinking:

4개의 좋아요

알고 있습니다. 제가 말하려는 것은

핵심이 아닌 플러그인 + 단일 vCPU 설치

이 조합이 사용자에게 재빌드를 권고할 필요가 있는 경우일 수 있다는 것입니다.

5개의 좋아요

CPU 1코어, RAM 1GB 서버를 사용 중입니다. 최소 10회 이상 시도했지만, 단 한 번 성공한 적이 있었을 뿐(그때도 재설치를 해야 했고, 그 결과 끝없는 실패의 악순환이 시작되었습니다) 그 이후로는 Discourse를 성공적으로 구동하지 못했습니다. 스왑을 2GB로, 그다음 5GB로 설정해 보았지만 모두 소용없었습니다 :person_shrugging: . 비핵심 플러그인은 전혀 설치하지 않았고, 그냥… 실패만 반복되었습니다.

2개의 좋아요

1vCPU와 1GB RAM - 제 기억이 맞다면, 이는 서버 사양이 너무 약한 것이며, 특히 RAM 측면에서 그렇습니다. 제 서버도 CPU가 1개이지만 RAM은 4GB입니다. 외부 플러그인이 있는 경우라면 여전히 다소 낮은 편이지만, 한번 생각해 보겠습니다. 당분간은 SWAP으로 충분할 것 같고, 만약 그렇지 않다면 더 큰 서버로 이전할 때까지 외부 플러그인을 꺼두겠습니다.

3개의 좋아요

네, 재구축을 위해 nginx, ruby, postgresql, redis, nodejs까지 실행해야 하는 1 vCPU는 아마도 버겁겠네요.

3개의 좋아요

참고로, 저는 인스턴스 중 하나를 2VCPU, 4GB RAM, 40GB 디스크로 운영하고 있으며, 빌드를 테스트하기 위해 discourse-doc-categories 플러그인을 추가했습니다 (코어 플러그인 외에 비공식 플러그인 2개도 사용 중입니다):

               total        used        free      shared  buff/cache   available
Mem:           3.7Gi       1.6Gi        98Mi        69Mi       2.3Gi       2.2Gi
Swap:          2.0Gi        14Mi       2.0Gi

어쨌든, 저는 재미로 아이폰에서 관리자 UI를 통해 최신(긴급) 업데이트를 실행해 보았는데, 이번에는 빠르고 문제없이 완료되었습니다. :slight_smile:

2개의 좋아요

관리 패널을 통해 업데이트를 한 번 진행한 후 대량의 첨부파일을 잃어버렸습니다. 이후로는 관리 패널을 통한 업그레이드나 업데이트를 하지 않고, 항상 rebuild를 사용했습니다.

1개의 좋아요

두 가지 모두 매우 유사한 작업을 수행하며, 사이트 콘텐츠나 업로드 폴더에는 영향을 주지 않습니다. 이는 매우 놀라운 점입니다.

가장 큰 차이는 서버에 가해지는 부하입니다.