Carregue ativos para o S3 após atualização no navegador

Depois de mover as imagens e ativos (js) do meu site para o S3, tentei atualizar o fórum usando a interface /admin/upgrade. A atualização ocorreu normalmente, mas parece que os ativos não foram enviados para o bucket do S3, deixando meu site indisponível até que eu reconstruí o aplicativo a partir do shell.

Lá eu tenho um hook que faz isso por mim. Seria bom ter esse tipo de funcionalidade também na interface web. Não sei se isso já está disponível; se estiver, por favor, me avise. :slight_smile:

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

Não, você não pode mover ativos para o S3 a partir da área de administração. Você precisará fazer isso via SSH, pois há tarefas adicionais necessárias no momento dessa migração, a menos que esteja fazendo isso em uma instalação nova.

Ah, entendi. Eu gostava da forma contínua e sem tempo de inatividade de atualizar até mudar para o S3. Existe alguma maneira de não servir JavaScript através do S3 e usar o S3 apenas para imagens?

Você não pode servir JS através do S3. Você só pode fazer upload e servir mídia (imagens, documentos, vídeos, etc.) através do S3.

Para JS, você precisaria de uma CDN, como o CloudFront.

Sim, não estou servindo JS diretamente do S3; ele é armazenado no S3 e servido por meio de CDN. O que eu quis perguntar foi: posso armazenar o JS localmente e servi-lo por meio de CDN, guardando apenas os arquivos de mídia no S3?

Você está entendendo tudo errado mais uma vez.
O Discourse JS é destinado a ser servido diretamente através do CDN, com a instalação do Discourse atuando como origem de puxamento. Não sei como você colocaria JS no S3, mas lembre-se de que o JS é regenerado a cada reconstrução. Qualquer coisa que você serviria pelo S3 provavelmente estaria desatualizada, e você estaria convidando mais problemas.

Isso começou a acontecer depois que configurei as configurações do S3 seguindo este link: Configure an S3 compatible object storage provider for uploads

É por isso que eles adicionaram o hook after_assets_precompile para fazer o upload dos ativos atualizados no S3.

Como posso corrigir isso? Ele retorna 404 se eu tentar acessar qualquer ativo por meio do servidor local. Precisa ser via S3. Caso contrário, eu teria configurado uma regra de roteamento de borda no meu CDN para buscar as solicitações de ativos por meio do domínio local.

Se você leu o título da postagem, “Armazenamento de Objetos para Uploads” já diz o suficiente no próprio título.

O que você quer dizer com domínio local? Onde seu Discourse está instalado?

Por domínio local, quis dizer o servidor onde o Discourse está instalado, como se os arquivos JS estivessem locais ao servidor Nginx e não na S3.

Infelizmente, o tópico mencionado não faz isso, mesmo sendo chamado de “usando armazenamento de objetos para uploads”. Se você configurar seu fórum de acordo com as instruções desse tópico, será necessário fazer o push dos ativos para o S3.

Como posso configurá-lo de forma que me permita manter arquivos JS no servidor de instalação do Discourse?