Сайт автоматически выходит из режима только для чтения при включении через 'discourse enable_readonly'

Всем привет,

Я настраиваю автоматизацию для развёртывания и миграции с помощью Ansible, но столкнулся с проблемой в режиме только для чтения.

Когда я включаю режим только для чтения командой:
docker exec app discourse enable_readonly
или

./launcher enter app
discourse enable_readonly

через ~1:20 сайт сам выходит из этого режима.

Если же я включаю режим только для чтения через веб-интерфейс (раздел администрирования/резервные копии), он остаётся включённым до тех пор, пока я его не отключу.

Есть какие-то идеи?

Вы проверили логи? Возможно, где-то у вас есть фоновая задача или плагин, который прерывает процесс.

Привет, Лилли,

Спасибо за ответ. Это чистая установка по умолчанию, я не устанавливал никаких плагинов и не создавал никаких задач. Какие логи мне лучше посмотреть? Извините, я немного новичок.

Я попробовал использовать 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

Я ждал возникновения события, наблюдая за логами, но ничего примечательного не заметил.

Для меня странно, что всё работает идеально при активации через веб-интерфейс, но не работает через CLI.

У меня тоже возникали проблемы с этим — как при включении, так и при выключении режима только для чтения. В последний раз мне пришлось выполнить Discourse.enable_readonly_mode в консоли Rails.

Когда это происходит, всегда возникает чрезвычайная ситуация, и я не исследовал, в чём может быть проблема.

Кстати, в моих собственных инструментах Ansible я не использую режим только для чтения, но применяю Introducing Post Deployment Migration.

Спасибо, Джей. Похоже, я пытаюсь решить проблему не тем способом (XY-проблема). Я изучу миграцию после развёртывания. Спасибо за подсказку.

Другой вариант, возможно, — активировать RO через вызов API.

- name: пост-миграции
  shell: "docker exec {{ discourse_yml }} bash -c 'rake db:ensure_post_migrations db:migrate'"
  become: yes

Так что это может сработать для режима только для чтения:

- name: пост-миграции
  shell: "docker exec {{ discourse_yml }} bash -c 'echo Discourse.enable_readonly_mode | rails c'"
  become: yes

Спасибо, очень признателен. Попробую это сделать сегодня вечером.

Связано ли это с тем, что вы используете режим только для чтения?

Спасибо, JammyDodger! Информация и ссылка были очень полезны. Я не уверен, что именно считается перезапуском контейнера — насколько мне известно, мой контейнер не перезапускается каждые ~1:30, именно столько времени режим только для чтения остаётся включённым при использовании discourse enable_readonly, то есть Discourse.enable_readonly_mode(Discourse::READONLY_MODE_KEY).

Однако я могу подтвердить, что Discourse.enable_readonly_mode(Discourse::USER_READONLY_MODE_KEY) остаётся активным неограниченно долго, чего я и стремился добиться :+1:

Для полноты:

- name: Установить режим только для чтения для хоста живого форума
  ansible.builtin.shell: |
      docker exec app bash -c 'echo Discourse.enable_readonly_mode\(Discourse::USER_READONLY_MODE_KEY\) | rails c'
  register: enable_readonly_output