Temos construído, testado e buscado intencionalmente lacunas em nosso fórum Discourse antes de levar toda a estrutura para produção. Acabei de migrar meu fórum de teste, que tinha uploads no S3 ativados, de um servidor para outro e, ao restaurar, todas as URLs de qualquer coisa anexada foram reescritas para a URL do fórum e não para o S3…
Felizmente, este é um fórum de teste, então não nos importamos muito com os dados. No entanto, gostaria de:
A. Ainda assim corrigir isso.
B. Encontrar uma maneira de mitigar/impedir que isso aconteça em produção.
Não foram apenas as postagens, mas todas as imagens, mídias, conteúdos e avatares (o que é bastante drástico) que foram afetados por isso…
Antes de restaurar, você pode configurar o S3 no site de destino no seu app.yml (não pelo painel de administração). Assim que confirmar que está configurado e que é possível acessar o bucket correto, pode prosseguir com a restauração e as mídias devem ser vinculadas corretamente.
Fizemos exatamente isso e foi assim que acabamos naquela situação.
Copiei o app.yml exatamente como estava para o destino e depois fiz o backup do original. O problema foi a restauração, pois ao restaurarmos, as URLs foram reescritas, mesmo sem nenhuma alteração e com os uploads no S3 ainda ativados.
No final, resolvemos isso com um rebake (acreditamos, pois o cache do Discourse é muito agressivo; entre as várias soluções que tentamos, não sabemos exatamente o que funcionou). No entanto, permanecem sem resposta as questões sobre como realizar migrações com o mínimo de problemas ou mesmo como restaurar a partir de um backup, se necessário, em produção.
Parece que você configurou o S3 via configurações do site, e não por meio de variáveis de ambiente, como Kris sugeriu. O processo de restauração precisa ter conhecimento do S3. Isso não é possível com as configurações do site.
Você também pode criar um backup sem uploads no console, se desejar: discourse backup --sql_only
Restaurar esse tipo de backup não reescreverá as URLs dos uploads. Portanto, desde que seu novo servidor tenha acesso ao mesmo bucket S3, isso funcionará.
A configuração do S3 está no app.yml. Não nas configurações do site.
Edição:
Percebo que não estou sendo muito explicativo e não tenho a intenção de esconder detalhes.
Usamos o S3 da OVH e ele está configurado no app.yml.
Fiz um backup do nosso fórum de testes sem os uploads, mas o S3 ainda estava ativado naquele momento.
Depois, restaurei no novo site com o mesmo app.yml, e foi aí que o problema começou. Para deixar claro, já está resolvido agora, mas não tenho certeza se foi por eu ter refeito o processo várias vezes ou se foi devido ao cache agressivo do Discourse. É por isso que preciso saber como fazer isso corretamente e acertar de primeira. Meu receio é que, se um dia precisarmos restaurar um backup na nossa instância de produção e enfrentarmos isso, eu precise saber exatamente como resolver isso o mais rápido possível, antes que os usuários percebam.