@schleifer Ei, podemos ter um guia após isso, por favor?
OK, isso é algo com o que podemos trabalhar. Primeiro, mova todos os arquivos de /default/* para /original/1X/*.
Isso é conhecido por nós, mas não pelo banco de dados. A próxima etapa ajustará o caminho para todos os uploads no banco de dados. Antes de alterarmos qualquer outra coisa, vamos fazer uma verificação de sanidade.
Inicie um console do banco de dados:
cd /var/discourse
./launcher enter
rails db
Execute esta consulta para analisar o resultado:
select id,url from uploads where id > 0 and url not like '//PREFIX/original/%'
Você precisará substituir PREFIX por BUCKET + ‘.s3.dualstack.’ + REGION + ‘.amazonaws.com’, o que resultaria em algo como //pesioforum.s3.dualstack.us-west-2.amazonaws.com/original/%.
Isso deveria retornar (0 rows). Se não retornar, teremos etapas extras.
Há 7 uploads para sua consulta e nenhum deles é do S3.
Então, todos os links do S3 apontam apenas para o original, certo? Os 7 uploads são de antes de começarmos a usar o S3 para uploads (outubro de 2018).
Dos links do S3 (2614),
2368 usam //pesioforum.s3.dualstack.ap-south-1.amazonaws.com
246 usam //pesioforum.s3.ap-south-1.amazonaws.com
Ambos os links funcionam, apenas mencionando isso aqui, pois pode afetar qualquer expressão regular que possamos usar.
@schleifer Por favor, ajude-nos a terminar isso. ![]()
OK, então você deve estar liberado para mover arquivos de /default/ para /original/1X.
Você pode migrar esses arquivos para o S3 executando rake s3:upload_assets
O endpoint dualstack funciona para IPv6 e IPv4. O outro é apenas para IPv4.
Há um script na imagem para remapear strings no banco de dados. Antes de executá-lo, SEMPRE FAÇA UM BACKUP via /admin/backups (Menu hambúrguer → Admin → Backups).
Isso deve corrigir os 246:
discourse remap '//pesioforum.s3.ap-south-1.amazonaws.com/original/' '//pesioforum.s3.dualstack.ap-south-1.amazonaws.com/original/'
Após mover tudo de /default/ para /original/1X/, podemos remapear esses arquivos no banco de dados. Mas antes disso, devemos garantir que tudo em /original/2X esteja realmente lá.
Essa consulta retorna o mesmo número de linhas que a contagem de objetos reais sob esse caminho no bucket?:
select url from uploads where url like '//pesioforum.s3.dualstack.us-west-2.amazonaws.com/original/2X/%'
Olá @schleifer
Você pode migrar esses arquivos para o S3 executando
rake s3:upload_assets
Executei isso e os ativos (js, css, etc.) do site foram carregados. Os 7 arquivos não foram carregados.
Encontrei rake uploads:migrate_to_s3, mas gostaria de confirmar se essa é a tarefa correta para isso.
Existe um script na imagem para remapear strings no banco de dados
Isso funcionou bem e não há mais links antigos não dualstack na tabela uploads.
Mas, antes disso, devemos garantir que tudo em
/original/2Xesteja realmente lá.
Infelizmente, não é esse o caso. Há 521 arquivos no bucket S3, mas 2186 registros na tabela uploads.
Testei alguns arquivos que não estão em /original/2X/ como necessário e todos estão em /default/.
Exemplo: Da tabela uploads,
https://pesioforum.s3.dualstack.ap-south-1.amazonaws.com/original/2X/8/806a660beb158e9f06d07ffcd2370b389bbd250b.jpeg não existe, mas o mesmo arquivo está em
https://pesioforum.s3.dualstack.ap-south-1.amazonaws.com/default/806a660beb158e9f06d07ffcd2370b389bbd250b.jpeg
Neste ponto, como uma solução única, estamos confortáveis em apenas mover todos os arquivos de /original/2X/{}/ para /original/1X/ e atualizar os posts, etc., com os novos links.
Novos uploads estão sendo colocados corretamente em 2X de qualquer forma.
Aha, sim, essa foi a que eu realmente pretendia. Ela deve enviar esses últimos sete.
De fato, essa é a melhor opção neste momento. Copie todos os arquivos do subprefixo /2X/ e mova tudo para /1X/.
Depois que tudo estiver no lugar, aqui está um comando que deve atualizar todas as entradas do banco de dados:
discourse remap --regex "//pesioforum\.doublestack\.s3\.ap-south-1\.amazonaws\.com/original/[1234]X/([0-9a-f]/){0,}" "//pesioforum.doublestack.s3.ap-south-1.amazonaws.com/original/1X/"
(Lembre-se do aviso anterior sobre fazer um backup.)
Depois disso, alguns posts podem precisar que a versão HTML seja reconstruída pelo menu da chave inglesa. Se houver mais do que alguns, você pode reconstruir tudo com rake posts:rebake.
@schleifer funcionou! Com uma regex modificada e um rebake de todas as postagens, a maioria das imagens e uploads está funcionando bem.
Há algumas imagens (que não são postagens) que ainda linkam para /optimized/, mas podemos corrigir isso manualmente. Ex: logotipos em diferentes temas, etc.
Muito obrigado pela sua ajuda!
Olá, também enfrentamos um problema semelhante ao seu em nosso ambiente e gostaríamos de contar com ajuda para resolvê-lo.
Nosso problema é semelhante ao seu em vários aspectos:
- Temos o mesmo valor listado em
s3 upload bucketes3 backup bucket. - Encontramos esse problema ao atualizar o Discourse:
Versão antiga: v2.3.0.beta3
Nova versão: v2.5.0.beta6
- Acessei o contêiner do Discourse e consultei o banco de dados:
SELECT id,url FROM uploads where id > 0 and url not like '//acme-forum.s3.dualstack.us-west-2.amazonaws.com/original/%';
id | url
----+----------------------------------------------------------------------------------------------------
1 | /uploads/default/original/1X/eb17xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc33.png
2 | /uploads/default/original/1X/b87fxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxv21.png
78 | //acme-forum.s3-us-west-2.amazonaws.com/original/1X/1205xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxv045.png
(3 linhas)
- Acessei novamente o contêiner do Discourse e consultei o banco de dados:
select url from uploads where url like '//acme-forum.s3.dualstack.us-west-2.amazonaws.com/original/3X/%';
//acme-forum.s3.dualstack.us-west-2.amazonaws.com/original/3X/6/2/6267xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf607c.jpeg
(7953 linhas)
- Verifiquei quantos itens existem em ./original/3X/; a resposta foi
251itens.
Perguntas:
- Estamos usando
dualstacke não quero remapear nossas URLs para não usá-lo. - Nossa estrutura de pastas é diferente; temos coisas como
3X/X/Y(por exemplo:3X/7/a). Então, como posso mover tudo dedefaultpara3X/*se ainda assim não mapeará corretamente?
Minha ideia atual é escrever um script que use a saída do Passo 4 para descobrir onde mover o arquivo de volta para a pasta ./original/3X/X/Y.
O único problema é que, quando fiz isso, o dualstack ainda não havia hospedado esse arquivo. O que quero dizer é que, ao substituir o arquivo em original/3X/X/Y, consigo vê-lo ao acessar:
Quebrado https://acme-forum.s3.dualstack.us-west-2.amazonaws.com/original/3X/6/b/6b6xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa001.png
Atualização: descobri que o endpoint dualstack nunca esteve quebrado como eu pensei; cometi um erro ao copiar originalmente o arquivo de imagem para ./original/3X/6/b, onde esqueci de permitir a leitura pública.
Portanto, minha pergunta é:
Seria uma opção viável para mim mover os arquivos de imagem de ./default de volta para ./original/3X/x/y e, em seguida, não modificar o banco de dados de forma alguma?
Ok, então tenho uma atualização.
Parece que consigo prever onde as imagens ./original devem ser colocadas, mas não sei como corrigir as imagens ./optimized.
No nosso fórum, se você navegar até uma das nossas postagens, ele tenta exibir a imagem ./optimized.
Existe alguma maneira de saber qual é uma imagem optimized?
Minha ideia é que as imagens otimizadas terminam com _2_10x10.png. Seria essa uma suposição razoável? Se for o caso, seria uma solução viável usar um script para copiar qualquer coisa que contenha algo como _2_10x10.png para a pasta optimized e tudo o que não tiver, direto para a pasta ./original?
exemplo:
GET https://acme-forum.s3.dualstack.us-west-2.amazonaws.com/optimized/3X/c/c/ccaxxxxxxxxxxxxxxxxxxxxxxxxxxxx85_2_690x268.png
[HTTP/1.1 403 Forbidden 0ms]
Obrigado!
@41821 Se as URLs na tabela uploads estiverem corretas e funcionando, mas as postagens ainda tentarem carregar as imagens otimizadas, limpar a tabela optimized_images e refazer todas as postagens deve resolver: discourse=> delete from optimized_images;
Muito obrigado pelo feedback! Na verdade, acabei resolvendo (se é que se pode chamar assim) escrevendo um script para mover a imagem do diretório /default de volta para /optimized com base no nome do arquivo. Isso parece ter funcionado e não tenho mais nenhum problema.
Se isso acontecer novamente no futuro, farei o que você sugeriu: excluirei tudo de optimized_images e refarei o bake.
Obrigado!
