Imagens quebradas e seus URLs S3

Após a atualização recente para 2.5.0.beta7, todas as minhas imagens no fórum estão quebradas.
image

O avatar também foi substituído pelo padrão. Estas são minhas sugestões no painel:

Minhas Postagens de Staff para Ativos:

Uma dessas imagens: /original/2X/4/4064b1cc32199de63ad2fa2b5bd2a0c5b6872c6d.png

No entanto, meu S3 não tem essa imagem: (por que isso aconteceu?)

Meu favicon e outros logotipos estão faltando: /original/1X/b32666bfe0e0eac40aacb178c7430c9f7873b397.png

No entanto, meu S3 tem apenas esses arquivos:

Note como a URL está errada e não há nenhuma pasta 1X dentro da pasta original.

Tentei seguir o tutorial deste post:

Mas não resolveu nada.

Posso apontar que essa imagem não está no seu bucket, ela é 4061…41.png? :thinking:
Ela está presente localmente?

Desculpe, escolha errada de palavras. Queria dizer que notei que não está no bucket S3, nenhum deles está.

Como verifico isso localmente?

Ah, faz mesmo mais sentido :sweat_smile:
Você pode verificar localmente com qualquer cliente SSH que preferir. Dependendo da sua configuração, os arquivos devem estar em algo como /var/discourse/shared/standalone/uploads/default/original/2X/
Então, você pode executar ls -R /var/discourse/shared/standalone/uploads/ | grep 4064b para encontrar o arquivo 4064b…d.png

Falando sobre a mesma instância do Discourse que @masterakay mencionou.

Migramos para o S3 há mais de 2 anos; nenhum dos arquivos no diretório de uploads local é mais recente que 2018.

Sei que as imagens são carregadas na pasta “original”, processadas (recortadas, redimensionadas, etc.) e colocadas na pasta “optimized”. As URLs usadas pelo Discourse ao carregar imagens ainda vêm da pasta “/original/1X/”. De alguma forma, com a atualização, a pasta “1X” desapareceu.

Existe uma pasta “default” que contém muitos uploads (imagens, etc.), bem como versões recortadas. Há cerca de 10 mil arquivos aqui, totalizando aproximadamente 2,5 GB.

O problema é que as URLs das imagens nas postagens sempre apontam para a versão “original”.
Notamos que os arquivos ausentes são um subconjunto dos arquivos presentes na pasta “default”.
Novos uploads funcionam sem problemas e são armazenados em “/original/2X/”.

Alguém tem ideias de onde a pasta “/original/1X/” pode ter ido e se é possível recuperá-la?

@sam @codinghorror Sinto muito por arrastá-los para isso, mas é bastante urgente. Somos estudantes e estamos meio desamparados com a pressão da faculdade para corrigirmos as imagens.

Estou vendo isso também, e começou logo após uma atualização mais recente.

https://discourse.sesp.northwestern.edu

Como você configurou o S3? Você definiu algum valor no app.yml ou apenas na interface de administração? Parece que algo inesperado está ocorrendo com DISCOURSE_S3_BUCKET ou DISCOURSE_S3_BACKUP_BUCKET.

Sim, como expliquei, tudo estava bem até a atualização recente. Seguimos todos os passos.
Em particular, fizemos algo assim:

Quanto a esses valores, não consigo encontrar nenhuma variável definida no app.yml. Antes não era necessário. Algo mudou?

De fato. Algo pode não estar funcionando corretamente no código, mas não sabemos o quê nem o porquê. Então, precisamos de mais informações.

Existem duas maneiras diferentes de configurar o S3: você pode configurar o ambiente no app.yml ou inserir os valores na interface de administração. As variáveis têm nomes ligeiramente diferentes em cada caso.

O tópico que você vinculou descreve como configurar na interface de administração. Se foi assim que você configurou seu site, pode nos dizer quais são os valores de s3_upload_bucket e s3_backup_bucket?

@schleifer O mesmo para mim. Eu também não alterei nada nessas configurações. Além disso, verifiquei que minhas credenciais da AWS estão funcionando.

Ah, isso explica.

O problema ocorreu porque essas configurações não devem ter o mesmo valor — pesquise no tópico de configuração pela linha “Preciso realmente usar buckets separados para uploads e backups?”.
Um job de manutenção foi executado no conteúdo do bucket de backups e afetou os uploads porque seus valores se sobrepunham.

@sam, provavelmente devemos impor isso no código, não apenas na documentação.

Para corrigir seu site, há dois passos:

Primeiro, você precisará alterar o prefixo de backups — adicionar /backups ao final, conforme descrito no tópico de configuração, é suficiente.

Depois, mova tudo de volta para o local correto dentro do bucket S3. Tudo que está na pasta superior “default” deve ser movido de volta para o nível superior.
Por exemplo, provavelmente há uma pasta “default/originals” que deve ser movida para cima.

Você terá que usar o console da web da AWS ou alguma outra ferramenta para navegar pelo bucket.

Tudo bem, muito obrigado! Vou testar os passos e volto aqui caso algo aconteça. Tem ideia do por que isso aconteceu de repente? :sweat_smile:

Ei @schleifer, faz sentido. Adicionei o prefixo “backups” ao nome do bucket.

Quanto aos uploads existentes, todos estão em /default/ (não em subpastas). As URLs das imagens nos posts (e em todos os outros lugares) usam /original/* ou /optimized/*.

Se movermos tudo da pasta default um nível acima (para a raiz), as imagens ficarão em /*.
E não, não há pastas dentro de defaults, apenas arquivos de upload. Parece conter arquivos com nomes padrão de hash de 40 caracteres, bem como alguns com sufixos como “_2_10x10” (que presumo serem de otimizados).

Como você sugere resolver isso? Corrigir todos os posts com novos links levará tempo. É possível agrupar os arquivos nas pastas corretas com base nesse nome de arquivo?

@schleifer alguma atualização sobre isso?

Isso é… inesperado. Teremos que corrigir manualmente várias coisas, então.

A pergunta mais importante seria: “os novos uploads estão indo para o local correto?”

Supondo que isso seja verdade, você pode colocar os uploads antigos em um local conhecido e ajustar a entrada deles no banco de dados. Quantos arquivos existem em /default/?

Os novos uploads estão funcionando conforme o esperado nas subpastas, felizmente. E os links nas postagens apontam para o local correto.

Há mais de 10 mil arquivos em /default/. Editar cada postagem manualmente parece ser um grande trabalho. Existe alguma maneira de automatizar isso? Talvez com uma substituição por regex em todas as postagens?

Esse é o plano, sim. O próximo passo é colocar todos os arquivos AWOL em um local conhecido. No bucket, quais subdiretórios existem em /original/? Deveria haver /1X/ e pode haver outros.

Esta é a estrutura completa da pasta. Os novos uploads (que funcionam bem) são armazenados em /original/2X/*/.jpg

/
|---backups
    |---default
        |---(vários arquivos de backup .tar.gz)
|---default
    |---(10719 arquivos carregados: pdf, imagens, etc.)
|---inventory
    |---1/pesuioforum/{optimized,original}/[DATA]/manifest.{checksum,json}
|---optimized
    |---1X
        |---(2 arquivos)
    |---2X
        |---{0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f}
            |---(arquivos carregados que começam com o caractere do nome da pasta acima) (1055 arquivos no total)
|---original
    |---2X
        |---(Igual a optimized/2X, 520 arquivos)
|---tombstone
    |---optimized
        |---1X
            |---(2 arquivos)
    |---original
        |---2X
            |---(Igual a optimized/2X, 1 arquivo)

A próxima coisa a fazer é colocar todos os arquivos AWOL em um local conhecido.

O /default/ já parece conter todas as imagens.