Sim, mas você sobrescreveu isso no seu ponto #2, então, ao fazer isso, você volta a colocar os arquivos no S3.
As configurações do arquivo app.yml são usadas apenas ao reconstruir o contêiner e servem para preencher o arquivo config/discourse.conf no contêiner em construção.
Ahh! Então, se eu tiver qualquer variável s3_ no meu arquivo conf/discourse.conf, o Discourse acha que tenho uploads no S3 ativados? Ok… entendi… Vou remover isso e tentar novamente.
Provavelmente só há uma que importa… Não estou no meu computador para verificar o que tudo poderia causar isso, mas se essa verificação for acionada, eu esperaria que seu site estivesse enviando todas as novas uploads para o S3.
Está funcionando, está funcionando, está funcionando, funciona e funciona! Uhuuu!!! Muito obrigado por todo o seu trabalho e por explicar com paciência o que eu precisava fazer. É ótimo ver isso em andamento.
Então, algumas perguntas rápidas só para eu entender melhor o que está acontecendo…
Tenho executado lotes de 100 por vez. Nos primeiros ciclos, a ferramenta estava migrando posts (?), mas agora ela só está copiando imagens. Tenho milhares e milhares de posts e cada um geralmente tem apenas uma imagem anexada… então não entendo por que/como ela “ficou sem” posts para migrar? O que significa migrar um post? Então essa é a pergunta 1: o que está acontecendo exatamente? ![]()
A pergunta 2 é mais simples. Agora, quando executo, ele só copia imagens, mas notei que imagens 2X estão sendo copiadas para 3X localmente:
Downloaded 27/100: //my-forum-storage.s3.dualstack.us-east-1.amazonaws.com/original/2X/1/14c56ef9f1dddb7b7a6f14e920234e0f714ea699.jpeg to /uploads/default/original/3X/1/4/14c56ef9f1dddb7b7a6f14e920234e0f714ea699.jpeg
Note que a URL mudou de 2X/1/xyz.jpeg para 3X/1/4/xyz.jpeg (há um caminho de pasta extra ali).
Isso está tudo certo?
Por fim, tenho feito verificações pontuais nas imagens e elas parecem estar ok, mas como não tenho ideia de qual post está associado a cada imagem, não consigo fazer uma verificação “ao vivo” no fórum e ter 100% de certeza de que meus usuários estão vendo o que deve ser visto. Como posso mapear o nome do arquivo da imagem jpeg para um post do fórum?
Quais comandos exatamente você estava digitando? Você precisará expandir o limite para cobrir todas as suas postagens.
Então, acabei especificando um limite grande assim que tive certeza de que estava avançando para a próxima fase, algo assim:
bin/rake uploads:batch_migrate_from_s3[100,100000]
Ele migra primeiro os uploads que encontra nas postagens; não há integridade referencial entre as referências em post.raw a um upload e o objeto de upload no banco de dados. Ele procura postagens com qualquer referência a URLs simples ou URLs do pseudoprotocolo upload:// que representam conteúdo remoto, onde é necessário pelo menos recozir a postagem após a migração, se não salvar uma modificação como para URLs base apontando diretamente para o S3. Quando não consegue encontrar nenhum conteúdo em uma postagem que precise ser migrado, ele prossegue para o próximo item.
As mudanças de caminho não são algo impulsionado diretamente pelo script de migração; são apenas mudanças no local onde o Discourse armazena os arquivos. Um nível a mais de diretório ajuda no desempenho quando você tem muitos arquivos, e muitos outros sistemas usam dois e ocasionalmente três níveis de diretórios para distribuir os arquivos.
Você pode encontrar o mesmo problema que eu: ao migrar os outros uploads, o Discourse perdeu o rastreamento das Imagens de Perfil dos usuários. Não percebi isso até que fosse muito tarde para restaurar a partir de um backup, então apenas enviei mensagens aos usuários afetados, pedi desculpas e pedi que corrigissem seus avatares. Ainda não sei o que deu errado ali.
Ah, ok, legal. Vejo isso na saída de progresso:
Todas as uploads de posts migradas. Migrando uploads de perfil...
Todas as uploads de perfil migradas. Migrando outras uploads que não são de posts...
O que são “uploads que não são de posts”? É aqui que parece que todo o trabalho restante está – migrar posts e uploads de perfil não faz nada.
Obrigado pelo alívio em relação aos caminhos para as uploads brutas!
Não tenho certeza se isso está acontecendo ou não, mas tudo bem – meu site usa SSO, então passo a URL do avatar toda vez que o usuário faz login (ou altera sua imagem no site principal).
Honestamente, não sei o que eram os demais. Eu esperava que, se a integridade referencial fosse uma preocupação, houvesse uma restrição de chave estrangeira e que, caso contrário, o sistema simplesmente procurasse o upload e usasse onde quer que estivesse. Com certeza, já encontrei restrições de chave estrangeira como um indicador de que era necessário fazer algo especial para dois uploads vinculados a perfis de usuário.
Hmm, parece que está funcionando mesmo… embora eu tenha enfrentado um problema sério esta manhã… de repente, o uso do disco aumentou 25% e encheu a unidade, derrubando completamente os fóruns.
No momento, enquanto executo o rake, parece que ele está baixando/carregando as imagens exatamente durante a execução em lote. Eu digito o comando rake, ele processa exatamente 300 imagens (estou executando em lotes de 300) e depois termina.
Então, a pergunta importante é: seria possível colocar em fila apenas a transferência desses downloads do S3 para o disco local? Isso poderia ter acumulado algum tipo de lote que acabou ocorrendo às 5h e derrubou meus fóruns? ![]()
Fiz com que o sistema esperasse a fila esvaziar antes de realizar cada nova postagem durante a migração de posts, cada novo conjunto de uploads de perfis e, em seguida, cada outro upload. Ele deve estar processando todas as suas imagens logo após serem movidas. (A versão padrão apenas acumula tudo e entope a fila até terminar; no meu caso, isso teria significado de 10 a 12 dias sem enviar nenhuma notificação do fórum enquanto as imagens eram reprocessadas.)
Nada me vem à mente sobre o que poderia ter causado um pico como esse, a menos que tenha encontrado uma série de uploads muito grandes?
É um mistério para mim. Quer dizer, nem mesmo estou executando os lotes com tanta frequência — estou inserindo o comando manualmente a cada vez e observando a execução. Não tenho mais nenhum post ou perfil para migrar; tudo o que resta são “outros uploads”. Quando executo o lote, parece que ele está baixando do S3 e reenviando para o Digital Ocean em tempo real. (E não vejo nada no Sidekiq que indique que algo esteja sendo enfileirado.)
Estou tentando encontrar outros logs que possam indicar o que aconteceu às 5:35 da manhã.
Leia o tópico inteiro.
Mas a maior parte parecia confusa para mim. Embora eu esteja totalmente familiarizado com os comandos do Docker/containers e comandos básicos do Rails.
Estou enfrentando problemas semelhantes (muitos dos meus posts têm imagens ausentes, ou algumas não mostram as imagens até que alguém clique nelas).
Eu estava usando 2 buckets S3 diferentes em 2 momentos diferentes do ano. Tenho cerca de 1000 posts e aproximadamente tantas imagens.
Agora copiei todas as imagens dos buckets S3 para meu servidor local. Alguém pode me dizer como remapear as URLs do Discourse para que essas imagens agora estejam conectadas corretamente aos posts?