Falha na reconstrução - pulando a seção "after_assets_precompile" de app.yml

Acabei de executar um ./launcher rebuild app — sem alterações nos arquivos relacionados ao sistema. Agora estou preso nos pontos piscantes do Discourse.

Verifiquei o seguinte:

  • O docker ps mostra a imagem do aplicativo Discourse (parece normal).
  • O comando top mostra atividade (parece normal).
  • Posso ver o status do Sidekiq (parece normal).

Então, reconstruí o aplicativo novamente.
Mesmos resultados.
Tentei usar o Modo de Segurança. Tudo desativado. Nenhuma mudança. Ainda estou recebendo a tela dos pontos piscantes.

Revisei cada linha do código-fonte. Vejo que tenho quatro arquivos JS que não estão disponíveis. Eles são:

Existem vários arquivos JavaScript ausentes. Estes foram os primeiros encontrados.

Revisão inicial:

  • Os arquivos não estão disponíveis através da minha entrega de CDN.
  • A CDN puxa do meu bucket S3.
  • Os arquivos não estão no meu bucket S3 onde todos os outros ativos são armazenados.

Olhando para os resultados da reconstrução, posso ver o seguinte.

  1. Os 4 arquivos foram criados e gravados em public/assets/ com a extensão de arquivo .js.
  2. Os 4 arquivos foram compactados e salvos com a extensão de arquivo .br.js.

Verificando meu servidor:

  1. Todos os 4 arquivos .js estão disponíveis no meu servidor.
  2. Os arquivos .br.js não estão disponíveis no meu servidor.
  3. Os arquivos .br.js não estão no meu bucket S3.

Percorrendo os resultados da reconstrução, parece que a atividade after_assets_precompile não está acontecendo em minhas reconstruções. Posso executar manualmente um rake s3:upload_assets e os ativos são migrados para o S3 e tudo funciona bem.

Verifiquei o seguinte:

  1. Meu arquivo yml passa nas verificações de formatação adequada.

O que posso verificar para determinar por que o after_assets_precompile não está processando como parte da reconstrução?

nota: Estou executando: 3.4.0.beta4-dev - 6a50b3d4b4

1 curtida

Você adicionou a stanza para fazer upload de ativos?

Configure um provedor de armazenamento de objetos compatível com S3 para uploads

Você pode encontrar essa tarefa rake lá e executá-la de dentro do contêiner (para economizar o tempo de uma reconstrução). E então faça uma reconstrução assim que editar seu arquivo yml.

O S3 está ativo e funcionando no site há 43 dias. Os comandos rake foram colocados lá como parte da instalação do S3.

O site foi reconstruído pelo menos 30 vezes. Adicionei plugins e componentes adicionais ao longo do caminho. Isso indicaria que arquivos .js foram adicionados e populados no bucket S3.

O componente S3 tem funcionado muito bem. Esta é a primeira vez que tenho problemas com arquivos não sendo migrados para o S3.

O que posso investigar para entender por que os arquivos não foram movidos?

Alguém sabe o que pode causar a falha na execução do after_assets_precompile?

1 curtida

Ajuda!

Na reconstrução, o processo pula a seguinte seção no arquivo app.yml:

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

Imediatamente após a reconstrução, posso processar os comandos manualmente via:

./launcher enter app
rake s3:upload_assets
rake s3:expire_missing_assets

Os comandos são executados e processam os arquivos necessários para o S3.

Adicionei um comando echo à seção after_assets_precompile.

      cmd:
        - echo "Beginning of precompile commands"
        - sudo -E -u discourse bundle exec rake s3:upload_

A declaração echo nunca aparece na saída da reconstrução.

A etapa de reconstrução processa as etapas antes e depois desta seção no arquivo app.yml. Ele processa todos os plugins e comandos personalizados.

Tomei as seguintes medidas para tentar resolver:

  1. Removi todos os plugins
  2. Desabilitei todos os componentes
  3. Revisei todos os arquivos de log do discourse. Não encontrei nenhum erro indicado.
  4. Revisei os arquivos de log do sistema base. Não encontrei nenhum erro indicado.

Alguém tem alguma ideia de por que o processo de reconstrução pularia esta seção?

Como teste, movi os comandos after_assets_precompile para a seção de comandos personalizados.

run:
  - exec: echo "Início dos comandos personalizados"
  ## Se você quiser definir o endereço de e-mail 'De' para o seu primeiro registro, descomente e altere:
  ## Após receber o primeiro e-mail de inscrição, comente a linha novamente. Só precisa ser executada uma vez.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  ## comando para proteger o site com senha durante o trabalho. remova para produção.
  - exec:
      cd: $home
      cmd:
        - echo "Início dos comandos de pré-compilação"
        - sudo -E -u discourse bundle exec rake s3:upload_assets
        - sudo -E -u discourse bundle exec rake s3:expire_missing_assets
  - exec: echo "Fim dos comandos personalizados"

Os comandos funcionaram sem problemas. Isso descarta problemas de acesso ambiental ou de segurança.

O processo do launcher está pulando o código after_assets_precompile durante a reconstrução.

Alguém tem alguma ideia?

1 curtida

Sem ideia, mas reconstruí há cerca de 4 horas sem problemas.

1 curtida

Talvez você tenha um erro de espaço em branco ou de indentação no seu arquivo yml. Procure um validador e verifique: [validar yaml]

esta não deve ser uma chave de nível superior, deve estar em hooks, por exemplo:

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

Isso foi listado na primeira postagem. O app.yml foi validado para indentação correta.

1 curtida

@supermathie - você é incrível e tem uma visão fantástica. Você conseguiu ver que o código não estava com recuo de dois espaços. E apenas de um único trecho em vez da seção mais extensa. Obrigado.

Adicionei os dois espaços e isso resolveu o problema.

Eu havia executado o app.yml anteriormente em um verificador de yml. A ferramenta de teste me disse que o arquivo estava estruturalmente correto. Ela não pôde me dizer que estava funcionalmente errado.

O trecho de código correto deve ser:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-adplugin
          - git clone https://github.com/discourse/discourse-affiliate
          - git clone https://github.com/discourse/discourse-subscriptions
          - git clone https://github.com/discourse/discourse-yearly-review
          - git clone https://github.com/discourse/discourse-whos-online
          - git clone https://github.com/discourse/discourse-data-explorer
  # define arquivos internos para cdn
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - echo "Início dos comandos de pré-compilação"
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

Para documentar o arquivo app.yml. As únicas chaves de nível superior são:

  • templates:
  • params:
  • env:
  • volumes:
  • hooks:
  • run:

Todo o resto deve ter recuo.

O mais simples dos erros pode ser o mais frustrante. Seis horas da minha vida foram perdidas por dois espaços.

Meu reino por dois espaços.

2 curtidas

Isso acontece comigo o tempo todo.

Meu outro favorito é editar o arquivo errado, ou o arquivo certo no computador errado.

2 curtidas

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.