'discourse enable_readonly'로 활성화하면 사이트가 자동으로 읽기 전용 모드에서 나옵니다

안녕하세요,

Ansible로 배포 및 마이그레이션 자동화를 설정하고 있는데, 읽기 전용 모드와 관련하여 문제가 있습니다.

다음 명령어로 읽기 전용 모드를 활성화하면:
docker exec app discourse enable_readonly
또는

./launcher enter app
discourse enable_readonly

약 1분 20초 후 사이트가 자동으로 읽기 전용 모드를 해제합니다.

웹UI(관리자/백업 섹션)를 통해 읽기 전용 모드를 활성화하면, 제가 직접 해제하기 전까지 활성화된 상태로 유지됩니다.

어떤 생각이 있으신가요?

로그를 확인해 보셨나요? 어딘가에 프로세스를 중단시키는 백그라운드 작업이나 플러그인이 있을 수 있습니다.

릴리, 안녕하세요.

답장 주셔서 감사합니다. 이건 완전히 새로운 기본 설치 환경이고, 플러그인을 설치하거나 작업을 만든 적도 없습니다. 어떤 로그를 확인하는 것이 좋을까요? 제가 아직 초보라 죄송합니다.

아래 파일들에 대해 tail -f를 사용해 봤습니다:

/var/discourse/shared/standalone/log/rails/unicorn.stdout.log
/var/discourse/shared/standalone/log/rails/unicorn.stderr.log
/var/discourse/shared/standalone/log/rails/production_errors.log
/var/discourse/shared/standalone/log/rails/production.log
/var/discourse/shared/standalone/log/rails/sidekiq.log
/var/discourse/shared/standalone/log/var-log/redis/current

로그를 추적하면서 해당 이벤트가 발생하기를 기다렸지만, 눈에 띄는 내용은 찾지 못했습니다.

웹 UI를 통해 활성화할 때는 완벽하게 작동하는데, CLI를 통해서는 작동하지 않는다는 점이 제게는 이상하게 느껴집니다.

저도 그 기능을 사용할 때 문제를 겪었습니다. 읽기 전용 모드를 활성화하고 비활성화할 때 모두 마찬가지였죠. 마지막에는 결국 rails에서 Discourse.enable_readonly_mode를 실행해야 했습니다.

매번 이런 일이 발생하면 긴급 상황이 되어서 문제의 원인을 조사해 본 적이 없습니다.

참고로, 제 Ansible 도구에서는 읽기 전용 모드를 사용하지 않고 Introducing Post Deployment Migration 에 소개된 방식을 사용하고 있습니다.

제이, 감사합니다. 이 문제를 XY 접근법으로 해결하려고 하고 있는 것 같습니다. Post Deployment Migration을 확인해 보겠습니다. 감사합니다.

다른 옵션으로는 API 호출을 통해 RO를 활성화하는 방법이 될 수 있겠네요.

- name: post migrations
  shell: "docker exec  {{ discourse_yml }} bash -c 'rake db:ensure_post_migrations db:migrate'"
  become: yes

따라서 읽기 전용 모드에서 이 방식이 작동할 수 있습니다:

- name: post migrations
  shell: "docker exec  {{ discourse_yml }} bash -c 'echo Discourse.enable_readonly_mode | rails c"
  become: yes

감사합니다, 정말 감사드립니다. 오늘 밤 시도해 보겠습니다.

사용 중인 읽기 전용 모드 때문일까요?

JammyDodger님 감사합니다! 정보와 링크가 정말 도움이 되었습니다. 컨테이너 재시작이 정확히 어떤 경우를 의미하는지 잘 모르겠습니다. 제가 아는 한, discourse enable_readonly를 사용할 때 RO 모드가 활성화되어 있는 시간(약 1분 30초) 동안 컨테이너가 재시작되는 것은 아닙니다. 즉, Discourse.enable_readonly_mode(Discourse::READONLY_MODE_KEY)를 사용할 때 RO 모드가 유지되는 시간입니다.

다만, Discourse.enable_readonly_mode(Discourse::USER_READONLY_MODE_KEY)가 무기한 유지되는 것은 확인했습니다. 제가 원했던 것이 바로 이 것이었습니다 :+1:

완벽성을 위해:

- name: Set read-only mode for live forum host
  ansible.builtin.shell: |
      docker exec app bash -c 'echo Discourse.enable_readonly_mode\(Discourse::USER_READONLY_MODE_KEY\) | rails c'
  register: enable_readonly_output