업데이트 중 로그 패널이 업데이트를 멈춤

두 개의 포럼을 2.7.0.beta6으로 업데이트 중입니다. 하나는 docker manager와 discourse를 순차적으로 업데이트하는 방식으로 순조롭게 진행되었습니다. 다른 하나는 data explorer 업데이트도 필요한 상태였는데, discourse 자체의 최종 업데이트 과정에서 로그 패널이 두 번이나 멈추는 현상을 겪었습니다. 두 번 모두 Waiting for Unicorn to reload........... 단계에서 멈췄으며, 한 번은 시작 부분에서, 한 번은 브라우저 탭을 새로고침한 후인 종료 부분에서 발생했습니다.

종료 부분에서 멈췄을 때는 ‘Waiting’ 행이 11줄 출력된 후에 멈췄습니다.

Done compiling CSS: 2021-04-08 12:54:13 UTC
Restarting unicorn pid: 49
Waiting for Unicorn to reload.
Waiting for Unicorn to reload..
Waiting for Unicorn to reload...
Waiting for Unicorn to reload....
Waiting for Unicorn to reload.....
Waiting for Unicorn to reload......
Waiting for Unicorn to reload.......
Waiting for Unicorn to reload........
Waiting for Unicorn to reload.........
Waiting for Unicorn to reload..........
Waiting for Unicorn to reload...........

시작 부분에서 멈췄을 때도 대략 같은 줄 수에서 멈췄습니다.

다른 탭에서 Processes 페이지를 통해 프로세스를 모니터링할 수 있었고, 진행이 되고 있음을 확인할 수 있었습니다.

업그레이드는 성공적으로 완료되었고, 새로고침 후 전체 로그를 확인하고 검토할 수 있었지만, 로그 패널의 새로고침이 중단된 점은 불안감을 주었고 다소 오해의 소지가 있었습니다.

JavaScript 콘솔에서는 보고할 사항이 없습니다.

아, 오랜만에 JS 콘솔(맥의 크롬)에서 무언가를 발견했습니다.

[Violation] 'setTimeout' handler took 64ms

이것은 docker-manager-vendor-970…js 파일의 5211행으로 링크되어 있으며, 이는 /assets/docker-manager-vendor-9709990270a4ade37544c98dda3cfad18f77cdf6cd433291c3c5ef7bd25cb50d.js 파일입니다.
해당 코드는 다음과 같습니다.

try{r||n?t=s.minPollInterval:(t=s.callbackInterval,o>2?t*=o:a()||(t=s.backgroundCallbackInterval),t>s.maxPollInterval&&(t=s.maxPollInterval),(t-=new Date-w)<100&&(t=100))}catch(i){console.log&&i.message&&console.log("MESSAGE BUS FAIL: "+i.message)}d&&(clearTimeout(d),d=null),u&&(d=setTimeout((function(){d=null,e()}),t)),s.longPoll=null}})}},s={minHiddenPollInterval:1500,enableChunkedEncoding:!0,enableLongPolling:!0,callbackInterval:15e3,backgroundCallbackInterval:6e4,minPollInterval:100,maxPollInterval:18e4,callbacks:n,clientId:i,alwaysLongPoll:!1,baseUrl:"/",headers:{},ajax:p&&p.ajax,noConflict:function(){return e.MessageBus=e.MessageBus.previousMessageBus,this},diagnostics:function(){console.log("Stopped: "+l+" Started: "+u),console.log("Current callbacks"),console.log(n),console.log("Total ajax calls: "+O+" Recent failure count: "+o+" Total failures: "+R),console.log("Last ajax call: "+(new Date-w)/1e3+" seconds ago")},pause:function(){f=!0},resume:function(){f=!1,T(h),h=[]},stop:function(){l=!0,u=!1,v&&(clearTimeout(v),v=null),s.longPoll&&s.longPoll.abort()},start:function(){var r

시스템의 메모리가 부족했거나 다른 문제가 있었던 것 같습니다.

콘솔에서 다시 빌드해 볼 수 있을까요?

업그레이드는 성공적으로 완료되었음을 주목하세요: 오류는 브라우저가 로그 스트림을 표시하는 데 있습니다. 새로고침을 하면 전체 로그가 표시되었습니다. 따라서 여기서는 업그레이드나 재빌드, 서버 측 문제가 아닌 클라이언트 측 문제라고 확신합니다.

다른 사람이 이 문제를 겪지 않는다면, 제 브라우저나 노트북의 문제로 치부하는 것이 좋겠습니다.

브라우저가 보는 JS가 소스 트리와 어떻게 관련되는지 이해하지 못하지만, 콘솔에서 링크된 코드가 이것일 수도 있습니다(최근 변경되지 않은 코드입니다)

제가 관리하는 사이트 중 일부에서는 같은 문제가 발생했지만, 모든 사이트에서 그런 것은 아니어서 설정 문제인 것 같습니다. 아직 구체적인 증거는 없지만, 제 생각에는 멀티사이트(multisite)와 관련이 있을 가능성이 가장 높습니다.

유용한 정보를 드리지 못해 죄송합니다. 다만 이 문제가 당신에게만 특이한 것이 아님을 확인해 드리고자 참여했습니다.

감사합니다. 흥미롭고 유용한 정보네요. 아직 멀티사이트 구성을 사용하지 않고 있으며, 제 두 포럼은 서로 다른 호스트에 있습니다. 따라서 멀티사이트와 비멀티사이트 구성 모두에서 이 내용을 확인할 수 있겠네요.

2.7.0.beta9 업데이트 후에도 이 문제가 다시 발생했습니다: 로그 스트림은 유니콘(unicorn) 프로세스를 종료 중이라고 표시한 채 그대로 멈춰 있었고, 다른 탭에서 열어본 프로세스 뷰에서는 precompile이 이미 시작되었던 상태였습니다.

우회 조치로 버전 뷰 탭을 열었고, 이제 'Currently Upgrading’이라고 표시된 큰 파란 버튼을 확인했습니다. 이 버튼을 클릭하여 새 로그 뷰를 성공적으로 열었고, 해당 뷰는 정상적으로 자체 업데이트되었습니다.