Frontend no site de Produção fora do ar -- Erro no Ember/Test

O front-end da minha instância do Discourse está completamente em branco e não carrega após a nova atualização. Isso não é bom e estou um pouco em pânico, pois os usuários estão insatisfeitos. O backend parece estar funcionando.

Isso aconteceu após a atualização mais recente hoje, em um droplet da Digital Ocean executando um contêiner. Usei o launcher para reconstruir o aplicativo.

Qualquer ajuda é muito apreciada.

O erro no console diz:

app.js:31
Uncaught TypeError: Cannot read properties of undefined (reading 'registerAsyncHelper')    at s.callback (vendor-suffix.js:58:1)
    at s.exports (loader.js:106:1)
    at s._reify (loader.js:143:1)
    at s.reify (loader.js:130:1)
    at s.exports (loader.js:104:1)
    at s._reify (loader.js:143:1)
    at s.reify (loader.js:130:1)
    at s.exports (loader.js:104:1)
    at s._reify (loader.js:143:1)
    at s.reify (loader.js:130:1)
    at s.exports (loader.js:104:1)
    at requireModule (loader.js:27:1)
    at n._prepareInitializer (app.js:24:1)
    at app.js:81:1
    at Array.forEach (<anonymous>)
    at n.start (app.js:73:1)
    at HTMLDocument.<anonymous> (start-app.js:4:1)
    at discourse-boot.js:30:1
    at discourse-boot.js:31:1
3 curtidas

Todo o HTML está carregando bem, mas algo com o aplicativo Ember não está funcionando…

Olhando o código onde está falhando, parece que o Ember.Application.extend está lançando um erro por algum motivo

  var Discourse = Ember.Application.extend({
    rootElement: "#main",
    customEvents: {
      paste: "paste"
    },
    Resolver: (0, _resolver.buildResolver)("discourse"),
    _prepareInitializer: function _prepareInitializer(moduleName) {
      var themeId = moduleThemeId(moduleName);
      var module = null;

      try {
        module = requirejs(moduleName, null, null, true);

        if (!module) {
          throw new Error(moduleName + " must export an initializer.");
        }
      } catch (error) {
        if (!themeId || (0, _environment.isTesting)()) {
          throw error;
        }

O culpado parece ser esta condicional: !themeId || (0, _environment.isTesting)()

1 curtida

Ugh…era um plugin…não tenho certeza de qual é, mas depois de investigar um pouco aqui, suspeitei que esse poderia ter sido um problema…removi cakeday, signatures, data explorer, discourse-video-upload e encryption. Vou introduzi-los um de cada vez em uma data posterior e ver se consigo identificar o culpado. Mas, por enquanto, o aplicativo está de volta e não vou mexer nele

Experiência terrível. Sentindo-me bastante culpado agora…provavelmente deveria ter um processo de clone de staging para essas atualizações no futuro. Lição aprendida. Ou, no mínimo, sempre farei um snapshot antes da atualização para poder restaurar em caso de falha.

3 curtidas

O problema é o Discourse encrypt. Você pode corrigi-lo colocando-o por último no seu arquivo yml e selecionando o commit de antes de ele ser quebrado pela primeira vez (a verificação de assinatura foi quebrada outro dia), assim:\n\n\n - git clone https://github.com/discourse/docker-manager.git\n ... então seus outros plugins ...\n - git clone https://github.com/discourse/discourse-encrypt.git\n - cd discourse-encrypt \u0026\u0026 git checkout 12639de\n\n\nComo você pode ver, coloquei o plugin Discourse encrypt por último, caso os comandos cd e git checkout afetem comandos subsequentes (o que eu não acho que fariam).\n\nE sim, esse é o hash do commit da última versão que definitivamente funciona bem.\n\nMeu site agora está funcionando bem novamente. E o Discourse Encrypt tem os tiques verdes novamente.

6 curtidas

@TomSSL obrigado por esta análise do problema

@sam Vou me candidatar amanhã para a vaga de Engenheiro Full Stack. Pensando bem, enquanto estou correndo atrás de plugins quebrados, vou tentar me juntar à equipe e trabalhar em plugins :slight_smile:

Eu apenas enviaria uma mensagem direta para você, mas esta instância não me permite.

3 curtidas

Veja Current Openings | Discourse - Civilized Discussion :slight_smile:

1 curtida

Por favor, não deixe essa configuração ativa por muito tempo - sua instância não receberá atualizações futuras do plugin Encrypt. Isso muito provavelmente causará problemas no futuro.

Estamos cientes do problema de verificação de assinatura, e estamos trabalhando em uma correção e já enviamos uma correção.

No entanto, este erro Ember.Test é inesperado. @Mycobee, você pode confirmar qual versão do Discourse você está executando? Como você executou a atualização? Através da interface /admin/upgrade?

4 curtidas

Sim, isso é vitalmente importante e eu esqueci de mencionar (eram quase 4 da manhã na minha hora quando escrevi isso e eu tinha acabado de fazer as coisas funcionarem novamente e pensei em dar uma olhada aqui para ver se mais alguém tinha o mesmo problema). Esta é apenas uma correção temporária para fazer as coisas funcionarem novamente. Obrigado pelo lembrete @david.

Essa correção não funcionou para mim quando atualizei tudo às 00:00 UTC esta manhã (dez horas e meia atrás). Eu só atualizei minha instância então porque vi que a verificação de assinatura havia sido corrigida. Então tive que fazer a correção temporária descrita acima. É viável que minha atualização usual não tenha captado o código mais recente por algum motivo?

2 curtidas

Você ainda estava vendo o problema de verificação de assinatura :x:? Ou você encontrou o problema Ember.Test?

Além disso, acabei de verificar com a equipe e parece que identificamos o problema Ember.Test e teremos uma correção em breve. Atualizaremos aqui quando estiver disponível.

2 curtidas

Eu estava recebendo uma página inicial em branco e tive que desativar todos os plugins (em modo de segurança) para que o site carregasse. Faço atualizações semanais por volta das 9:00 UTC às segundas-feiras e esta foi uma atualização extra para corrigir o problema de verificação de assinatura. No entanto… houve muitas outras alterações detectadas também, é claro. E a versão foi atualizada para 2.9.0beta3 nesse período também.

Como você já terá visto (mas talvez alguém ainda não tenha), aqui está a diferença para o Discourse Encrypt entre a versão que estou executando agora e a versão mais recente até esta mensagem.

Além disso, não demorou muito até quase 4 da manhã para consertar. Estava tudo bem pouco antes das 2 da manhã, mas então tive que contar às pessoas o que havia acontecido (a maioria dos nossos usuários está nos EUA).

2 curtidas

Este problema deve ser corrigido por este commit no core do Discourse:

Portanto, assim que você atualizar o Discourse para a versão mais recente, deverá ser seguro atualizar o discourse-encrypt para a versão mais recente.

5 curtidas

Isso funcionou de fato, a atualização agora ocorre sem problemas.

3 curtidas

@david Atualizei para a versão 2.9.0.beta3, o que causou o problema.

Em relação ao processo de atualização, eu geralmente faço isso através da interface /admin/upgrade. Este caso foi diferente.

Eu apenas atualizei o docker-manager pela interface de atualização. Depois disso, tive que lidar com outras coisas e voltei ao caminho /admin/upgrade algumas horas depois para concluir o processo de atualização.

Fui recebido com uma página de texto dizendo para ir ao host, mudar para o diretório /var/discourse, fazer git pull e reconstruir o aplicativo com ./launcher… Foi o que eu fiz, e então o caos se seguiu.

Enquanto o estresse e os nervos estavam altos, encontrei algo neste fórum sobre TypeError não capturado estar relacionado a um plugin, então removi tudo o que não era essencial dos plugins de app.yml e reconstruí o contêiner. Nesse ponto, o aplicativo Ember começou a funcionar novamente.

1 curtida

Este tópico foi fechado automaticamente após 2 dias. Novas respostas não são mais permitidas.