Modos somente leitura no Discourse

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

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

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

O Discourse oferece vários Modos de Somente Leitura que os administradores podem ativar para congelar temporariamente diferentes tipos de interação dentro de 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 sobrepõem.

Entendendo os Modos de Somente Leitura

O Discourse suporta dois níveis diferentes de modos de somente leitura, adaptados para atender a diversas necessidades administrativas. Eles são:

  1. Modo Somente Leitura Completo
  • 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, permitindo que os usuários ainda leiam e naveguem pelo conteúdo existente sem impactar o banco de dados.
  • Desabilita a alteração de qualquer configuração do site ou personalizações do site, para que o estado atual do banco de dados seja preservado.
  • Desabilita novos logins no fórum para usuários comuns. Os administradores ainda podem fazer login usando o fluxo de login por e-mail de administrador (/u/admin-login).
  1. Modo Apenas Escrita para Equipe
  • Restringe usuários padrão de operações de escrita no fórum, como postar, comentar ou curtir. Usuários padrão ficam limitados a operações de somente leitura, mas ainda podem fazer login em suas contas.
  • Permite que as atividades de Administrador e Moderador 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 na gestão da operabilidade do fórum durante períodos administrativos críticos.

Como Ativar/Desativar Modos de Somente Leitura

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

Modo Somente Leitura Completo

Via Rails Console

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

Discourse.enable_readonly_mode(Discourse::USER_READONLY_MODE_KEY)

Via Painel Administrativo

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

Para desativar o Modo de Somente Leitura, execute o seguinte comando do Rails:

Discourse.disable_readonly_mode(Discourse::USER_READONLY_MODE_KEY)

Ou, use o painel administrativo navegando para Admin > Backups > Disable Read-Only Mode.

Modo Apenas Escrita para Equipe

:discourse: O modo Apenas Escrita para Equipe só pode ser ativado/desativado pelo console do Rails do Discourse. Se seu site é 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 para Equipe, use o seguinte comando no console do 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 Pontual: Informe sua comunidade sobre períodos de somente leitura agendados 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 (FAQs)

  • Quanto tempo leva para ativar/desativar o Modo de 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 fora do meu site por causa do modo de 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 pelo próprio aplicativo. Este modo também pode ser ativado ou desativado pela interface de linha de comando do Discourse com discourse enable_readonly e discourse disable_readonly. No entanto, essa chave não sobreviverá a uma reinicialização do contêiner.
    • USER_READONLY_MODE_KEY é usado quando um administrador clica no botão de somente leitura na interface administrativa. O especial sobre esta chave é que não a definimos como uma chave expirável, pois o modo de somente leitura ativado por um usuário precisa sobreviver a reinicializações do contêiner. Outras chaves são definidas com um TTL (60 segundos para READONLY_MODE_KEY, 300 segundos para PG_READONLY_MODE_KEY) e temos uma thread para estender a expiração a cada 30 segundos para garantir que um aplicativo nunca fique preso no modo de somente leitura.
    • PG_READONLY_MODE_KEY e PG_FORCE_READONLY_MODE_KEY são usados para failover do PostgreSQL. O primeiro é definido como uma chave expirável, enquanto o último é não expirável.
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