Avatares perdidos após restauração. Como recuperá-los?

Fiz uma instalação limpa do Discourse e restaurei o backup feito nesta mesma noite (utilizando a interface do Discourse para realizar o backup e a restauração).

O backup incluiu o banco de dados e os uploads.

Após a restauração e a reconstrução do aplicativo Discourse (pois supus que fosse necessário devido às alterações na configuração decorrentes da instalação limpa), surgiu um problema.

Os avatares de todas as pessoas que personalizam sua imagem de perfil foram perdidos.

Acho que isso tem a ver com a otimização de imagens; talvez seja necessário fazer algo (além do launcher rebuild app) para recriá-los.

Mas não encontrei qual é o passo perdido.

Encontrei tópicos de pessoas que perderam os avatares padrão (aqueles distribuídos com o Discourse), mas esse não é o nosso caso: as pessoas que não alteraram seu avatar (e não fizeram upload de uma imagem) ainda têm o avatar com a letra inicial no lugar.

ATUALIZAÇÃO:

Executei o seguinte:

./launcher enter app
rake posts:rebake

Mas isso não ajudou.

Será que não é posts:rebake?

@arinaf,

Estranhamente, isso mesmo aconteceu comigo hoje em uma configuração com um proxy reverso nginx para um socket Unix. Tudo estava perfeito, mas as imagens de avatar personalizadas estavam aparecendo como ícones (o ícone de pessoa) e todos os avatares de letras estavam OK.

Enquanto solucionava o problema, voltei para uma configuração padrão de dois contêineres (sem front-end nginx, sem socket Unix) e o problema desapareceu.

Depois, voltei para a configuração de proxy reverso nginx para um socket Unix, e o problema voltou.

Estou sem ideias… então vou dar uma pausa por um tempo :slight_smile:

Obviamente, os dados estão intactos, pois funcionam perfeitamente sem um proxy reverso nginx, o que é estranho, já que funciona bem sem ele. LOL. (estava funcionando perfeitamente de ambas as formas e, de repente, surgiu o problema estranho dos avatares…)

Essa é exatamente a minha configuração, pois estou executando outros softwares em um container Docker (um blog Ghost).
Eu tenho o nginx como proxy reverso.

Obviamente, restaurar backups não é tão simples quanto parece.

Tenho feito recriações, pois achava que o problema era a não salvaguarda das miniaturas, mas sem sucesso.

Vou tentar o que você disse para confirmar se o problema está com o proxy reverso (não faço ideia de como isso possa interferir, mas não perco nada tentando).

Sim… não acho que o problema esteja relacionado ao banco de dados de backend, à restauração do banco de dados (ou ao rake).

Assim que desativo o proxy reverso e executo dois containers sem ele, o problema desaparece. Como o banco de dados é o mesmo em todos os casos, é improvável que seja um problema no banco de dados.

Estou offline por 12 horas, então voltarei mais tarde para verificar o que aconteceu na sua configuração, @ariznaf.

Você está usando HTTPS fora do container?

Você inspecionou o código-fonte da página para ver quais URLs estão sendo usadas para os avatares?

Parece que force_https não está habilitado.

Não posso fazer isso agora, pois preciso começar do zero novamente.

Tentei copiar todos os arquivos (com o Discourse desligado na origem), mas também não funcionou (problemas com o banco de dados).

Vou tentar começar de novo, instalar um Discourse limpo e, em seguida, restaurar o backup feito com o Discourse.

Vou verificar, obrigado.

Tentar restaurar bancos de dados ou migrar de um host para outro está ficando mais difícil do que o esperado.

Obrigado a ambos.

Desde que você não esteja usando um proxy reverso e a plataforma de destino seja representativa e configurada corretamente, geralmente é incrivelmente simples.

Bem, exceto se, no intervalo, houver alguma atualização no próprio Discourse ou nos plugins que você está usando (estou usando apenas alguns plugins oficiais + pré-visualização de lista de tópicos e alguns componentes). Cada vez que tentei simular uma restauração, surgiu algum tipo de problema.

Sinto que o sistema de backup é fácil e direto, mas não é robusto o suficiente quando você precisa transferir tudo para outro servidor.
E também não é flexível o suficiente.

Leva muito tempo para finalizar (para um site não tão grande, o backup completo é de apenas 3 GB).

Nosso antigo fórum tinha mais de 100 GB de dados; seria impossível fazer backup de um fórum tão grande com o sistema atual.

As várias imagens de avatar redimensionadas não são incluídas em um backup, apenas as originais. O agendamento da tarefa levará algum tempo para processar e gerar as versões redimensionadas de todos os avatares.

AH, TUDO BEM.
Muito obrigado.
Eu não sabia que eles estavam sendo reconstruídos em segundo plano.
Então é só uma questão de esperar.

Eu estava ficando irritado usando rake posts:rebuild e coisas assim.

Você me poupou de muita dor de cabeça. Muito obrigado.

Você pode acelerar o processo acessando /sidekiq/scheduled no seu fórum e clicando no botão “Trigger” ao lado do job CreateMissingAvatars.

Uau, existe um mundo inteiro escondido ali em /sidekiq :slight_smile:

Tenho tentado o que você sugeriu.

Mas o job CreateMissingAvatars está agendado e é executado, porém termina quase imediatamente; leva apenas alguns milissegundos para completar. Tentei executá-lo manualmente (usando Trigger), mas ele também termina imediatamente com o resultado OK.

No entanto, os avatares continuam incorretos.
Estava usando minha configuração original, com o Discourse ouvindo em um socket e o Nginx como proxy reverso.

Agora vou tentar remover o Nginx e executar o Discourse nas portas 80 e 443.

Oi @ariznaf

Acord hoje de manhã depois de ficar offline por 12 horas e mudei de volta para nossa configuração socket-only.yml, e tudo voltou ao normal.

Então, pelo menos neste canto do vasto universo do Discourse, tudo está bem novamente em terra de dois contêineres, com proxy reverso nginx para socket Unix.

Tínhamos mudado para a configuração de front-end nginx talvez seis horas antes da anomalia (que foi notada), e tudo estava tranquilo.

Com base nessa dica útil do @riking (como sempre, muito apreciado, Kane)

As várias imagens de avatar redimensionadas não estão incluídas em um backup, apenas as originais. Levará algum tempo para que a tarefa agendada processe e gere as versões redimensionadas de todos os avatares.

Screen Shot 2020-04-17 at 9.06.09 AM

Minha melhor suposição é que, quando fizemos a mudança para o nginx, não notamos nenhum problema porque muitas imagens de avatar já estavam em cache e o processo de regeneração ainda não havia terminado; então, com o tempo, o cache dessas imagens expirou e a anomalia começou a aparecer.

Então, saí da rede (o contêiner socket-only.yml ainda está rodando em segundo plano, inativo) por 12 horas, acordei de manhã e o sidekiq fez sua mágica durante a noite (aqui), como @riking (ótimo suporte, aliás, Kane, em todos os tópicos aqui no meta).

Esse cenário parece confirmar o que @riking sugeriu.

Sinceramente, quanto mais usamos o Discourse, mais gostamos dele. Os pequenos problemas e anomalias são muito interessantes, e a configuração de dois contêineres é realmente excelente.

Nossos contêineres atualmente se parecem com isso:

# ls -l containers
-rw-r--r-- 1 discourse root 1124 Apr 15 11:29 data.yml
-rw-r--r-- 1 discourse root 3939 Apr 16 07:45 socket-only.yml
-rw-r--r-- 1 discourse root 3784 Apr 16 07:28 socket.yml
-rw-r--r-- 1 discourse root 3921 Apr 15 11:50 web-only.yml

O que eu gosto nisso é que, mesmo quando vemos um problema, como essa anomalia de regeneração de avatar, podemos facilmente alternar entre socket-only.yml e web-only.yml.

Neste caso, voltamos para web-only (durante essa regeneração) e mudamos de volta após o processo terminar (porque todos os contêineres ainda estão rodando). Quando fizermos uma reconstrução do contêiner, podemos simplesmente alternar entre esses contêineres e configurações com muita facilidade.

Vindo de duas décadas rodando um fórum LAMP, estamos cada vez mais impressionados com o Discourse, do lado do administrador de sistemas.

Barra lateral (Editorial);

Claro, está muito acima do meu nível aqui no meta, mas acho que a configuração básica de dois contêineres (sem o proxy reverso) deveria ser o padrão, pois é muito fácil de configurar e ganhamos muito mais com essa configuração do que qualquer “penalidade” percebida por ter dois arquivos yml.

Do meu lado, tentei fazer a restauração usando apenas o backup criado pela interface.

Como comentado, perdemos as imagens de avatar e algumas outras coisas menores.

Tentei seguir as orientações fornecidas por @riking, mas não tive sucesso.

Tentei atualizar as imagens de avatar forçando a execução do processo.
Mas o processo terminou com status OK após alguns milissegundos e os avatares não foram gerados.

Como estávamos com pressa para migrar o conteúdo, parei o fórum no servidor antigo, copie todo o conteúdo nos contêineres e diretórios compartilhados usando tar, instalei o Discourse no novo servidor (sem fazer a configuração inicial), copie para lá os diretórios compartilhados e de contêineres e recriei o app.

Agora tudo está funcionando no novo servidor.

A restauração a partir de backup está se mostrando mais problemática do que o esperado (já que parece ser simples, dado que as instruções indicam apenas reinstalar e restaurar pela interface).

Preciso investigar o que está dando errado na restauração e como garantir que o sistema será iniciado corretamente mesmo ao restaurar um backup antigo quando o Discourse estiver várias versões à frente da versão em que o backup foi feito.

Gosto muito do Discourse.
Vindo de fóruns tradicionais, às vezes é difícil encontrar o que você procura.
A interface limpa não ajuda nesses casos.

Mas quando você finalmente encontra, está onde deveria estar e funciona de maneira inteligente.

Temos tido problemas apenas na restauração a partir de backup.
E, às vezes, com o uso intensivo de cache.

O Discourse demora um pouco para carregar na primeira vez no seu navegador, mas depois disso voa, pois a maior parte do processamento é feita na sua própria máquina, e ele usa bastante cache (avatars, imagens, CSS…).
O app não busca informações que já estão no seu computador, o que economiza muito trabalho no servidor (pelo menos é o que parece, com base na minha experiência).

Quando tento migrar de um servidor para outro ou reinstalar o Discourse do zero, continuo vendo o conteúdo antigo mesmo atualizando a visualização.

Só consegui me livrar disso limpando o histórico de navegação do navegador.
Isso me manteve ocupado e confuso por bastante tempo.

A propósito, essas imagens de avatar são salvas se você selecionar as imagens de miniatura salvas no backup?
Você acha que é melhor salvá-las?
Nosso fórum não é muito grande, mas baixar 36.000 imagens levou bastante tempo.

Olá @ariznaf,

Nosso backup completo tem o mesmo tamanho, cerca de 3 GB totalmente compactados em gzip.

Até agora, não experimentei nenhum dos problemas que você mencionou em sua postagem (logo acima, #13).

Você restaura pela linha de comando ou pela interface de usuário?

Nós só restauramos pela linha de comando no container. Suponho que seja o mesmo para você?

Isso são boas notícias. Parabéns.

Obrigado pelo seu interesse.

Segui as instruções dos tutoriais usando a interface. Não sei como restaurar a partir da linha de comando (cópias de segurança feitas usando a interface do Discourse).

Deixe-me explicar:

Precisei mover o servidor de a.domain.com para b.domain.com.
O fórum Discourse é acessado via HTTPS com um SSL personalizado (certificados SSL de domínio amplo).
O Discourse foi instalado usando um socket e com HOST NAME a.domain.com.
Configuramos o nginx como proxy reverso para redirecionar permanentemente o tráfego HTTP (porta 80) para HTTPS (porta 443), e o HTTPS (porta 443) atua como proxy reverso com tráfego HTTPS, redirecionando-o para o socket onde o Discourse está escutando.

Tinha um backup (feito pela interface) de a.domain.com em um bucket S3, contendo banco de dados e uploads, mas não miniaturas (cerca de 3 GB).

Instalei o nginx e copie o arquivo de configuração de a.domain.com, alterando o nome do host de a.domain.com para b.domain.com.

Instalei o Discourse clonando do GitHub (como recomendado no tutorial de instalação de 30 minutos).
Em seguida, executei o setup do Discourse (com o nginx parado) e configurei-o com HOSTNAME b.domain.com.

Acessei a nova instalação em b.domain.com fazendo login como administrador.
Usando a interface, configurei os backups para acessar o bucket S3, ativei as capacidades de restauração de administrador e restaurei o último backup.

Depois disso, você é desconectado do Discourse, pois há novos usuários, configurações, etc.

De volta à linha de comando, editei o arquivo app.yml e copiei a configuração do servidor original (a.domain.com), alterando apenas o nome do host para b.domain.com.

Em seguida, executei ./launcher rebuild all e, após a conclusão, iniciei o nginx.

Consegui acessar o fórum Discourse, mas os avatares foram perdidos e há alguns outros problemas com as miniaturas de imagem.

Obrigado por tantos detalhes ótimos, @ariznaf.

Para ser honesto, não sou fã de serviços de armazenamento em nuvem como o S3. Portanto, acho melhor deixar de lado qualquer outra ideia, já que não somos “usuários de S3”…

Você diz que os avatares estão perdidos, mas inspecionou o código-fonte da página para ver de onde eles estão sendo solicitados?

Eles ainda estão no S3?

Por que você precisou alterar os subdomínios?

Para deixar claro: você alterou tanto o servidor físico quanto o endereço DNS?

Riking diz que o sistema precisa reconstruir as miniaturas. Mas o trabalho parece ter terminado.

Vou tentar novamente. Agora eu resolvi de outra maneira.

No S3, salvo apenas os backups; as imagens e uploads são armazenados localmente.

Mas preciso fazer testes de restauração para ver qual é o problema.
Vou verificar de onde ele está tentando recuperar a imagem.

Mas ele mostrou uma imagem de uma silhueta branca, então não é um link quebrado; provavelmente foi alterado pelo sistema porque não tem a miniatura.