DiscourseJsProcessor와 관련된 마이그레이션 문제?

Hey @david 부트스트랩과 관련해서 문제가 생겼어요:

I, [2023-08-24T16:50:36.568059 #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'                                  

이것이 DEV: Use esbuild to make DiscourseJsProcessor - Pull Request #23223%EA%B3%BC - discourse/discourse - GitHub 관련이 있나요?

1개의 좋아요

더 많은 백트레이스가 있나요? 아니면 어떤 마이그레이션이 이를 트리거하는지 확인할 수 있나요?

2개의 좋아요

실제로는 걱정하지 마세요. @cvx와 제가 문제를 찾았으니 곧 수정할 겁니다.

1개의 좋아요

그냥 바로 작동했어요!

몇 분 전에는 새로운 베이스 이미지로 해결될 줄 알았는데, 그 후에도 한 번 더 실패했어요. . .

어쨌든 지금은 잘 되는 것 같아요.

1개의 좋아요

좋아요, 작동한다고 해서 기쁩니다! 해결해야 할 계란과 닭 같은 상황이 조금 있습니다. 링크하신 커밋에 따르면, db:migrate를 실행하기 전에 assets:precompile을 최소 한 번 실행해야 합니다. 하지만 반대도 마찬가지입니다. assets:precompile은 최신 상태의 데이터베이스 스키마가 필요합니다.

참고로, 여기서는 어떤 과정을 거치셨나요? UI를 통해 docker_manager 기반 업그레이드를 수행하셨나요? 아니면 ./launcher rebuild app을 실행하셨나요? (또는 완전히 다른 방법을 사용하셨나요?)

1개의 좋아요

말을 너무 앞서나갔네요.

다시 실패했는데, . .. . 아. 그런데 지난번에는 데이터베이스가 이미 마이그레이션되어 있었나요?

작동했을 때는 커맨드 라인에서 ./launcher bootstrap x를 실행했습니다.

그다음 Ansible을 사용했는데, Ansible은 다음을 수행합니다.

      git pull && git checkout main && ./launcher bootstrap  {{ discourse_yml }} {{ launcher_args | default("")}}

(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에서 실행되는 다른 사이트를 업그레이드했는데, 마이그레이션 중에 뭔가 이상한 일이 있었고 그다음에 에셋이 깨져 있었습니다. 다만 데이터베이스가 매우 크기 때문에 제가 조급해서 그랬을 수도 있고, 또한 그 과정의 일부는 수동으로 수행했기 때문에 제가 부주의했던 것일 수도 있다고 생각했습니다.

1개의 좋아요

@cvx가 이 부분을 방금 병합(merge)했는데, 테스트가 통과하면 상호 의존성 문제를 해결할 것입니다:

그렇다면 말이 됩니다 :+1:.

오류는 데이터베이스 마이그레이션에 마크다운 엔진(PrettyText) 호출이 포함된 경우 발생하는 것으로 추정됩니다. 기존 사이트의 대부분에서는 드문 경우입니다. 하지만 완전히 새로운 사이트에서는 데이터베이스에 새 토픽을 시드(seed)하는 과정에서 일부 마크다운을 쿠킹(cooking)해야 하므로 문제가 발생할 수 있습니다.

아니요, 최근 몇 시간 동안만(DEV: Use esbuild to make DiscourseJsProcessor - Pull Request #23223 - discourse/discourse - GitHub 이후로) 발생하고 있습니다.

1개의 좋아요

음, 개발 환경에서 git pull을 실행하면 해당 커밋이 보이지만, ansible을 통해서든 로컬에서 직접 실행하든 여전히 실패합니다(데이터베이스는 삭제하지 않습니다).

아직 테스트 통과 상태가 아니므로, 표준 설치 환경에서는 여전히 실패할 것으로 예상됩니다.

이것이 로컬 ‘프로덕션’ 클러스터인가요? 아니면 개발 환경인가요?

1개의 좋아요

이것은 프로덕션 환경입니다. 리버스 프록시로 traefik을 사용하고 있지만, 그 외에는 표준 설치와 거의 동일합니다 (데이터베이스는 표준 postgres13 이미지로 구축되었지만, pgvector가 포함되어 있습니다).

개발 환경을 언급한 이유는, 해당 커밋이 테스트 통과 상태인지 확인하기 위해 개발 환경에서 git pull을 시도했기 때문입니다. 개발 환경의 git log에서 FIX: Compile js-processor before db:migrate (#23229)를 확인할 수 있습니다.

잠시 후 다시 시도하면서, 이전에 테스트하던 내용을 다시 테스트해 보겠습니다.

개발 환경이 main 브랜치에서 실행되고 있는 것 같습니다. 그래서 커밋이 표시되는 거겠죠. 내부 CI에서 테스트 통과 관련 문제가 발생했지만, 약 30분 내에 해결될 것으로 보입니다 :crossed_fingers:

1개의 좋아요

네, 이제 있어야 합니다. @pfaffman 한 번 더 시도해 보시고 결과를 알려주시겠어요?

1개의 좋아요

데이터베이스를 삭제하지 않고 bootstrap/deploy를 한 번 실행해 보았습니다: 성공했습니다!

데이터베이스를 삭제한 bootstrap/deploy를 한 번 더 실행해 보았습니다: 성공했습니다!

1개의 좋아요

업데이트 시 흰 화면만 뜨는 건 나뿐인가요?

명령줄에서 재빌드해야 할 가능성이 높습니다

이 주제는 10시간 후 자동으로 닫혔습니다. 더 이상 새로운 답변을 게시할 수 없습니다.