좋아요, 작동한다고 해서 기쁩니다! 해결해야 할 계란과 닭 같은 상황이 조금 있습니다. 링크하신 커밋에 따르면, db:migrate를 실행하기 전에 assets:precompile을 최소 한 번 실행해야 합니다. 하지만 반대도 마찬가지입니다. assets:precompile은 최신 상태의 데이터베이스 스키마가 필요합니다.
참고로, 여기서는 어떤 과정을 거치셨나요? UI를 통해 docker_manager 기반 업그레이드를 수행하셨나요? 아니면 ./launcher rebuild app을 실행하셨나요? (또는 완전히 다른 방법을 사용하셨나요?)
(git checkout main을 제거해야 할 것 같습니다. 왜 거기에 있었는지 모르겠네요)
아하. Ansible이 먼저 데이터베이스를 삭제하고 있네요(마이그레이션에 사용하는 사이트라 처음부터 시작하는 경우가 잦습니다). 그러니 당신의 계란(eggs) 이야기와 일치하네요. 한숨. 그런데 drop_database를 끄고 Ansible에서 두 번 실행했는데 실패했고, 다시 커맨드 라인에서 부트스트랩을 했지만 여전히 실패했습니다. 마이그레이션에 단서가 없습니다:
Installing mysql2 0.5.5 with native extensions
Bundle complete! 137 Gemfile dependencies, 173 gems now installed.
Gems in the groups 'test' and 'development' were not installed.
Bundled gems are installed into `./vendor/bundle`
I, [2023-08-24T17:24:31.403199 #1] INFO -- : Replacing types { with set_real_ip_from 192.168.1.0/24;
set_real_ip_from 172.19.0.0/24;
set_real_ip_from 172.18.0.0/24;
set_real_ip_from 172.17.0.0/24;
set_real_ip_from 38.242.7.193/28;
real_ip_recursive on;
real_ip_header X-Forwarded-For;
types {
in /etc/nginx/conf.d/discourse.conf
I, [2023-08-24T17:24:31.403687 #1] INFO -- : > cd /var/www/discourse && su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2023-08-24T17:24:33.084210 #1] INFO -- : discourse-microsoft-auth is already at latest compatible version
I, [2023-08-24T17:24:33.084593 #1] INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
rake aborted!
Errno::ENOENT: No such file or directory @ rb_sysopen - tmp/js-processor.js
/var/www/discourse/lib/discourse_js_processor.rb:140:in `read'
/var/www/discourse/lib/discourse_js_processor.rb:140:in `create_new_context'
/var/www/discourse/lib/discourse_js_processor.rb:156:in `block in v8'
/var/www/discourse/lib/discourse_js_processor.rb:154:in `synchronize'
/var/www/discourse/lib/discourse_js_processor.rb:154:in `v8'
/var/www/discourse/lib/discourse_js_processor.rb:169:in `block in v8_call'
/var/www/discourse/lib/discourse_js_processor.rb:168:in `synchronize'
/var/www/discourse/lib/discourse_js_processor.rb:168:in `v8_call'
/var/www/discourse/lib/discourse_js_processor.rb:193:in `perform'
/var/www/discourse/lib/pretty_text.rb:54:in `apply_es6_file'
하지만 'templates/enable-ruby-yjit.yml'이 문제일 수도 있나요? 수정: 그게 아니었습니다. 그리고 mysql과 import 템플릿을 제거했습니다. 그래도 여전히 안 됩니다.
이 문제가 이미 오래된 것일까요? 최근에 ECS에서 실행되는 다른 사이트를 업그레이드했는데, 마이그레이션 중에 뭔가 이상한 일이 있었고 그다음에 에셋이 깨져 있었습니다. 다만 데이터베이스가 매우 크기 때문에 제가 조급해서 그랬을 수도 있고, 또한 그 과정의 일부는 수동으로 수행했기 때문에 제가 부주의했던 것일 수도 있다고 생각했습니다.
@cvx가 이 부분을 방금 병합(merge)했는데, 테스트가 통과하면 상호 의존성 문제를 해결할 것입니다:
그렇다면 말이 됩니다 .
오류는 데이터베이스 마이그레이션에 마크다운 엔진(PrettyText) 호출이 포함된 경우 발생하는 것으로 추정됩니다. 기존 사이트의 대부분에서는 드문 경우입니다. 하지만 완전히 새로운 사이트에서는 데이터베이스에 새 토픽을 시드(seed)하는 과정에서 일부 마크다운을 쿠킹(cooking)해야 하므로 문제가 발생할 수 있습니다.
이것은 프로덕션 환경입니다. 리버스 프록시로 traefik을 사용하고 있지만, 그 외에는 표준 설치와 거의 동일합니다 (데이터베이스는 표준 postgres13 이미지로 구축되었지만, pgvector가 포함되어 있습니다).
개발 환경을 언급한 이유는, 해당 커밋이 테스트 통과 상태인지 확인하기 위해 개발 환경에서 git pull을 시도했기 때문입니다. 개발 환경의 git log에서 FIX: Compile js-processor before db:migrate (#23229)를 확인할 수 있습니다.