Chamar AdminDashboardGeneralData.refresh_stats na inicialização?

https://www.pfaffmanager.com/ está extraindo informações de /admin/dashboard/general.json para obter informações de versão. É muito legal poder obter isso da UX. Infelizmente, ele é atualizado periodicamente, não quando o servidor é iniciado, então se você fizer uma reconstrução, a informação fica errada por um bom tempo (até 30 minutos) antes de ser executada novamente. Meu plano é fazer com que minhas ferramentas Ansible chamem manualmente AdminDashboardGeneralData.refresh_stats após um novo contêiner ser iniciado, mas isso parece um pouco bobo.

Faria sentido executar essa tarefa na inicialização em vez de a cada 30 minutos? Existe uma maneira de atualizar sem reiniciar? Se não, por que está sendo executado a cada 30 minutos? Pelo menos acho que é isso que está acontecendo. Confirmei que executar o refresh_stats acima fará com que o general.json seja atualizado.

2 curtidas

Em geral, não gostamos de executar coisas ‘na inicialização’. Embora possa fazer sentido em um ambiente de servidor único e não multissite, as coisas ficam complicadas em escala.

Por exemplo, se você tiver uma configuração de escalonamento automático que adiciona/remove servidores com base na carga, cada um desses eventos de escalonamento pode fazer com que vários servidores sejam “inicializados” simultaneamente. Não gostaríamos que todos eles atrasassem a inicialização enquanto algumas estatísticas são atualizadas.

Também gostamos de garantir que os servidores possam inicializar com sucesso, mesmo que o banco de dados/redis esteja em um estado somente leitura.

Para este caso específico do pfaffmanager, você tem um plugin personalizado e/ou um template discourse_docker em execução nos sites? De fora do Discourse, você poderia acioná-lo como:

rails runner "About.refresh_stats
3 curtidas

Obrigado. Tudo faz sentido.

Não! Um dos princípios chave é que tudo é exatamente como seria em uma instalação padrão. Não há dependências específicas do pfaffmanager. Se alguém vir aqui que deve fazer algo como uma reconstrução, adicionar um plugin ou adicionar uma variável de ambiente a app.yml, o pfaffmanager fará exatamente como se soubesse o que é ssh e pudesse digitar comandos. As instalações usam discourse-setup, as atualizações executam ./launcher rebuild (ou bootstrap, destroy, start para configurações de 2 contêineres). Se o Postgres estiver desatualizado, os procedimentos em Atualização do PostgreSQL 13 são seguidos, e assim por diante. Algumas coisas me tentaram a criar um plugin de suporte opcional, mas eu principalmente quero evitar isso. Já estou lidando com Ansible, Rails e Ember - ter outra peça em jogo não é muito atraente.

Mas esse trecho do runner foi de grande ajuda. Executarei isso após a reinicialização de um contêiner recém-construído:

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

Muito obrigado. Era exatamente o que eu precisava.

3 curtidas