부팅 시 AdminDashboardGeneralData.refresh_stats를 호출해야 하나요?

https://www.pfaffmanager.com/ 은 버전 정보를 가져오기 위해 /admin/dashboard/general.json 에서 정보를 가져오고 있습니다. UX에서 이 정보를 직접 가져올 수 있다는 점은 매우 멋진 기능입니다. 불행히도 이 정보는 서버가 시작될 때 업데이트되는 것이 아니라 주기적으로 업데이트되므로, 재빌드(rebuild)를 수행하면 정보가 다시 실행될 때까지(최대 30분) 잘못된 상태로 유지됩니다. 제 계획은 새로운 컨테이너가 시작되면 Ansible 도구를 통해 AdminDashboardGeneralData.refresh_stats 를 수동으로 호출하는 것이지만, 이는 다소 비효율적으로 느껴집니다.

30분마다 실행되는 대신 부팅 시 해당 작업을 실행하는 것이 더 합리적인가요? 재부팅 없이 업데이트할 수 있는 방법이 있을까요? 만약 불가능하다면, 왜 30분마다 실행되는 것일까요? 적어도 제 생각에는 그렇게 작동하는 것 같습니다. 위에서 언급한 refresh_stats 를 실행하면 general.json 이 업데이트된다는 것은 확인했습니다.

일반적으로 우리는 '부팅 시’에 작업을 실행하는 것을 선호하지 않습니다. 단일 서버, 멀티사이트가 아닌 환경에서는 의미가 있을 수 있지만, 규모가 커지면 상황이 복잡해집니다.

예를 들어, 부하에 따라 서버를 추가/제거하는 오토스케일링 구성을 사용하고 있다면, 각 스케일링 이벤트가 여러 서버가 동시에 '부팅’되도록 유발할 수 있습니다. 일부 통계가 업데이트되는 동안 모든 서버의 시작이 지연되는 것은 원치 않는 상황입니다.

또한 데이터베이스/Redis가 읽기 전용 상태여도 서버가 성공적으로 부팅될 수 있도록 하는 것도 중요하게 생각합니다.

이 특정 pfaffmanager의 경우, 해당 사이트에서 커스텀 플러그인과/또는 discourse_docker 템플릿을 실행 중입니까? Discourse 외부에서 다음과 같이 트리거할 수 있습니다:

rails runner "About.refresh_stats

감사합니다. 모두 이해가 됩니다.

아니요! 핵심 원칙 중 하나는 모든 것이 표준 설치 환경과 동일하게 유지된다는 것입니다. pfaffmanager에 특화된 종속성은 전혀 없습니다. 누군가가 여기에서 리빌드, 플러그인 추가, 또는 app.yml에 환경 변수 추가와 같은 조치가 필요하다고 판단한다면, pfaffmanager는 ssh가 무엇인지 알고 명령어를 입력할 수 있는 사람인 것처럼 정확히 동일한 작업을 수행합니다. 설치는 discourse-setup을 사용하고, 업그레이드는 ./launcher rebuild를 실행합니다(2컨테이너 구성의 경우 bootstrap, destroy, start). Postgres가 오래된 버전이라면 PostgreSQL 13 업데이트의 절차를 따르며, 이 외에도 마찬가지입니다. 선택적 지원 플러그인을 만들 유혹을 몇 번 받았지만, 가능한 한 이를 피하고 싶습니다. 이미 Ansible, Rails, Ember를 다루고 있는데, 또 다른 요소를 추가하는 것은 매력적이지 않습니다.

하지만 그 runner 부분은 큰 도움이 되었습니다. 새로 빌드된 컨테이너가 재시작된 후 다음 명령어를 실행할 것입니다:

docker exec web_only bash -c 'rails runner AdminDashboardGeneralData.refresh_stats'

정말 감사합니다. 제가 필요했던 바로 그 것이었습니다.