Modos Somente Leitura no Discourse

:bookmark: Este guia explica os vários modos somente leitura disponíveis no Discourse, como ativá-los e desativá-los, e os cenários em que você pode querer usar cada modo.

:person_raising_hand: Nível de usuário necessário: Administrador

Gerenciar uma comunidade online vibrante no Discourse ocasionalmente requer que os administradores limitem temporariamente as atividades dos usuários. Essas situações podem variar desde a realização de manutenção de servidores, facilitação de backups ou transição de servidores. Durante esses períodos, é crucial restringir as atividades do fórum sem desligar completamente o acesso do usuário.

O Discourse oferece vários Modos Somente Leitura que os administradores podem ativar para congelar temporariamente diferentes tipos de interações em um site.

Este guia explora esses modos, focando especificamente em como ativá-los e desativá-los, incluindo o tratamento de situações em que certos modos se cruzam.

Entendendo os Modos Somente Leitura

O Discourse suporta dois níveis diferentes de modos Somente Leitura, adaptados para atender a várias necessidades administrativas. São eles:

  1. Modo Totalmente Somente Leitura

    • Restringe todas as operações de escrita no fórum, impedindo que qualquer usuário crie ou modifique conteúdo, como postar, comentar ou curtir.
    • Permite que o fórum seja essencialmente “congelado” em seu estado atual, de modo que os usuários ainda possam ler e navegar pelo conteúdo existente sem impactar o banco de dados.
    • Desabilita a alteração de quaisquer configurações do site de administração ou personalizações do site para que o estado atual do banco de dados seja preservado.
    • Desabilita novos logins no fórum.
  2. Modo Apenas Escrita da Equipe

    • Restringe usuários padrão de operações de escrita no fórum, como postar, comentar ou curtir. Usuários padrão são limitados a operações somente leitura e não poderão fazer login em suas contas assim que este modo for ativado.
    • Permite que as atividades de Administradores e Moderadores continuem normalmente. Administradores podem alterar configurações do site e usuários da equipe podem realizar operações de escrita como postar, curtir ou modificar perfis.

Esses modos garantem flexibilidade no gerenciamento da operabilidade do fórum durante períodos administrativos críticos.

Como Ativar/Desativar Modos Somente Leitura

:warning: Os administradores devem gerenciar cuidadosamente a transição entre diferentes modos somente leitura. Antes de ativar qualquer modo somente leitura, certifique-se de que qualquer um previamente ativado esteja desativado.

Modo Totalmente Somente Leitura

Via Console Rails

Se você tiver acesso à sua instalação do Discourse, use a interface de linha de comando do Discourse rails para executar o seguinte comando após entrar em seu contêiner Docker com ./launcher enter app e, em seguida, no console rails com rails c:

Discourse.enable_readonly_mode(Discourse::USER_READONLY_MODE_KEY)

Via Painel de Administração

Se você tiver acesso administrativo através da interface web, pode navegar para Admin > Backups > Enable Read-Only Mode para ativar o modo somente leitura.

Para desativar o Modo Somente Leitura, execute o seguinte comando rails:

Discourse.disable_readonly_mode(Discourse::USER_READONLY_MODE_KEY)

Ou, use o painel de administração navegando para Admin > Backups > Disable Read-Only Mode.

Modo Apenas Escrita da Equipe

:discourse: O modo Staff Writes Only só pode ser ativado/desativado a partir do console rails do Discourse. Se o seu site for hospedado pelo Discourse, entre em contato com team@discourse.org se desejar ativar ou desativar qualquer um desses modos.

Para ativar o Modo Apenas Escrita da Equipe, use o seguinte comando do console rails:

Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)

Para desativar:

Discourse.disable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)

Melhores Práticas

  • Comunicação Oportuna: Informe sua comunidade sobre os períodos programados de somente leitura com antecedência para definir expectativas adequadas.
  • Testes: Antes de implementar esses modos durante operações críticas, realize testes em períodos de baixo tráfego para entender seu impacto.
  • Documentação: Mantenha registros detalhados de quando e por que cada modo foi ativado ou desativado para auxiliar no planejamento operacional futuro.

Perguntas Frequentes

  • Quanto tempo leva para ativar/desativar o Modo Somente Leitura?

    • A alteração é imediata. No entanto, a experiência do usuário pode variar ligeiramente dependendo de suas ações durante o período de transição.
  • Ajuda! Estou bloqueado do meu site por causa do modo somente leitura - o que posso fazer para acessar meu site novamente?

  • Notei que existem outros modos READ-ONLY listados em discourse/lib/discourse.rb, o que esses modos fazem?

    • READONLY_MODE_KEY é usado principalmente para o processo de backup e restauração e é acionado pela própria aplicação. Este modo também pode ser ativado ou desativado a partir da interface de linha de comando do Discourse com discourse enable_readonly e discourse disable_readonly. No entanto, esta chave não sobreviverá a uma reinicialização do contêiner.
    • USER_READONLY_MODE_KEY é usado quando um administrador clica no botão somente leitura na interface de administração. A coisa especial sobre esta chave é que não a definimos como uma chave de expiração, pois a somente leitura habilitada por um usuário precisa sobreviver a reinicializações do contêiner. Outras chaves são definidas com um TTL de 60 segundos e temos um thread para estender a expiração a cada 30 segundos para garantir que um aplicativo nunca fique preso no modo somente leitura.
    • PG_READONLY_MODE_KEY e PG_FORCE_READONLY_MODE_KEY são usados para failover PG. O primeiro é definido como uma chave de expiração, enquanto o último não expira.
9 curtidas

Não consigo ver uma diferença! Essas descrições poderiam ser ajustadas de acordo, se de fato houver uma diferença?

1 curtida

Atualizei o guia para fornecer mais clareza aqui, por favor, nos informe se você ainda tiver alguma dúvida sobre algum dos modos somente leitura. :slightly_smiling_face:

1 curtida

Mas o que faz o comando discourse enable_readonly?

Ele usa READONLY_MODE_KEY, que define o ttl para 60, então ele desativa em algum momento. Agora eu vejo que

Existe alguma razão para este ser o comportamento padrão para este comando? Levei quase uma década para aprender que este comando é totalmente diferente do modo somente leitura da interface web, mesmo depois de ter sido prejudicado várias vezes. E agora me lembro que alguém tentou me contar sobre essas chaves uma vez e eu não consegui entender sua importância.

Na minha opinião, uma coisa muito mais sensata para discourse enable_readonly fazer seria executar Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY). Quem me dera ter notado isso há muitos anos!

Eu poderia enviar um PR algo como isto:

  desc "enable_readonly", "Habilita o modo somente leitura, permitindo escritas de staff"
  def staff_writes_only
    load_rails

    Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)
    puts 'O site agora está em modo somente leitura com permissão de escritas de staff.'
  end

Não estou muito familiarizado com isso, mas acho que seria confuso para enable_readonly_mode definir o site para um staff_writes_only_mode. São modos diferentes, ao realizar certas operações, você não gostaria que os funcionários tivessem permissão para escrever no banco de dados (durante uma restauração, por exemplo, eles serão removidos).

Talvez possamos fazer algumas outras coisas aqui:

  1. esclarecer que o modo somente leitura define um TTL na descrição dessa tarefa
  2. adicionar uma tarefa que invoca keep_readonly_mode para que possa ser estendida para mais de 60 minutos
  3. adicionar tarefas enable_staff_writes_only e disable_staff_writes_only
2 curtidas

Concordaria, mas seria muito menos confuso do que “definir modo somente leitura por um tempo”.

Tenho quase certeza de que o script de restauração define o modo somente leitura por si só, portanto, não é afetado por este comando.

Eu preferiria que proclamasse que está definido para X minutos quando for definido. Não é tão fácil encontrar a descrição.

Talvez. Não está claro para mim quem o usaria.

Isso seria ótimo!

Além disso, precisamos deixar claro que não estamos confundindo as tarefas rake com os comandos disponíveis através do comando discourse.

2 curtidas

Faz sentido. Há alguma chance de você enviar isso como um PR? O mesmo para os comandos enable_staff_writes_only e disable_staff_writes_only, se possível. Obrigado!

3 curtidas

Estou curioso para saber quais clocks param depois de iniciar o modo somente leitura? Os tópicos serão atualizados depois de definir o modo somente leitura?

também parece que as atualizações não funcionam se o modo somente leitura for definido pela interface do usuário da web