Imagens não carregaram após configurar uploads do S3

Olá. Acabamos de migrar do Discourse EC2 para o Discourse ECS (serviço de contêiner). Quando estávamos no EC2, o S3 Uploads ainda não estava configurado. Antes da migração, copiamos todas as imagens do EC2 para o bucket S3 (com acesso público). No entanto, após realizar a migração com o S3 Uploads ativado (ainda sem CDN), notamos que as imagens (e os avatares) não carregaram de forma alguma.

O app.yml contém:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: us-east-1
  DISCOURSE_S3_ACCESS_KEY_ID: aws_access_key
  DISCOURSE_S3_SECRET_ACCESS_KEY: aws_secret_key
  DISCOURSE_S3_BUCKET: <uploads-bucket>
  DISCOURSE_S3_BACKUP_BUCKET: <backups-bucket>
  DISCOURSE_BACKUP_LOCATION: s3

hooks:
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets

Executar o seguinte no contêiner também não ajudou:

rake posts:rebake
rake posts:missing_uploads
rake avatars:refresh

Também notamos a diferença entre as URLs das imagens (o Discourse ainda estava usando as URLs de “uploads locais do EC2”).

Este é o link no S3: https://[s3-bucket].s3.amazonaws.com/original/1X/831092e27d6c066c3618a587a5c378e1c794f2c6.png

Link no Discourse (URL ainda vinda dos uploads do EC2): https://[domain]/uploads/default/original/1X/831092e27d6c066c3618a587a5c378e1c794f2c6.png

O erro no navegador é: 404 NOT FOUND

Como configuramos o Discourse para usar as URLs corretas do S3 para as imagens?

Você executou a tarefa rake de migração para o S3?

Eu faria isso no ec2 antes de migrar.

1 curtida

Oi, Jay. Tentei executar o comando no ECS, mas encontrei um erro:

Só para confirmar, isso deve ser executado apenas no EC2? Existe outra maneira de migrar os uploads ou atualizar as URLs das imagens? Atualmente, a instância do EC2 está parada e a configuração atual do ECS já usa o domínio e o banco de dados/cache, então não tenho certeza se podemos apontar o domínio e o banco de dados/cache de volta para o EC2 antigo (e depois reconstruir) sem tempo de inatividade. Obrigado.

Você quererá executar o comando em uma instância que tenha acesso às imagens. Ah, mas se você as moveu para o S3 manualmente, então talvez precise fazer alguns ajustes na tabela de uploads.

Tenho trabalhado em um tutorial com instruções para migrar de um bucket para outro, que você pode usar para resolver seu problema, embora precise adaptar essas instruções para considerar suas mudanças de local para bucket, em vez de bucket para bucket.

Se eu fosse cobrar uma taxa fixa pelo serviço, provavelmente cobraria 4 horas, embora, se você pagasse por hora, poderia ser apenas uma.

Ah! Desculpe. Acabei de perceber isso. Se o EC2 estiver usando o mesmo banco de dados, talvez você consiga reiniciá-lo (mantendo o ECS no lugar) e executar a tarefa migrate-to-s3 ali; primeiro, você precisará colocar todas as configurações do S3 em variáveis de ambiente, conforme descrito em Usando Armazenamento de Objetos para Uploads (S3 e Clones). Essa provavelmente é a solução mais fácil. Recomendo fazer um backup apenas do banco de dados antes de começar.

1 curtida

Olá Jay. Obrigado pela resposta. Entendi. Acho que isso vai funcionar.

1 curtida