Falha na atualização de v2.7.0.beta1 para v2.7.0.beta2

Por favor, veja este gist gist:86508bebb133a06f79fadaeba345e3d6 · GitHub

Esta é uma instalação padrão e independente do Discourse, tentando atualizar de v2.7.0.beta1 para v2.7.0.beta2

O erro ocorreu aqui:

uglifyjs '/var/www/discourse/public/assets/_vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js' -m -c -o '/var/www/discourse/public/assets/vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js' --source-map "base='/var/www/discourse/public/assets',root='/assets',url='/assets/vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js.map'"
Erro de parse em _vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js:1850,34
        return Handlebars.compile(...arguments);
                                  ^
ERRO: Token inesperado: punc «.»
    at JS_Parse_Error.get (eval at <anonymous> (/usr/lib/node_modules/uglify-js/tools/node.js:18:1), <anonymous>:71:23)
    at fatal (/usr/lib/node_modules/uglify-js/bin/uglifyjs:394:27)
    at run (/usr/lib/node_modules/uglify-js/bin/uglifyjs:343:9)
    at Object.<anonymous> (/usr/lib/node_modules/uglify-js/bin/uglifyjs:259:5)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
rake aborted!
Errno::ENOENT: No such file or directory @ rb_file_s_size - /var/www/discourse/public/assets/vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js
/var/www/discourse/lib/tasks/assets.rake:287:in `size'
/var/www/discourse/lib/tasks/assets.rake:287:in `block (4 levels) in <main>'
/var/www/discourse/lib/tasks/assets.rake:178:in `block in concurrent?'
/var/www/discourse/lib/tasks/assets.rake:278:in `block (3 levels) in <main>'
/var/www/discourse/lib/tasks/assets.rake:269:in `each'
/var/www/discourse/lib/tasks/assets.rake:269:in `block (2 levels) in <main>'
/var/www/discourse/lib/tasks/assets.rake:178:in `concurrent?'
/var/www/discourse/lib/tasks/assets.rake:266:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.3/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => assets:precompile
(Veja o rastreamento completo executando a tarefa com --trace)
Docker Manager: FALHA NA ATUALIZAÇÃO

Alguma ideia? O site está offline como resultado. Obrigado.

Isso é um pouco perturbador. Você está sem espaço em disco ou algo assim?

Oi, não - no host, há 70 GB livres. Apenas 1% dos inodes estão em uso.

Eu assumi que o ‘no such file or directory’ era apenas um efeito colateral disso:

Parse error at _vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js:1850,34
        return Handlebars.compile(...arguments);
                                  ^
ERROR: Unexpected token: punc «.»

Esse arquivo definitivamente existe:

root@redmine:/var/discourse# ./launcher enter app
ls -al ls -al root@xxxxx-app:/var/www/discourse# ls -al /var/www/discourse/public/assets/vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js
-rw-r--r-- 1 discourse www-data 659907 Jan 22 04:55 /var/www/discourse/public/assets/vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js

Não tenho certeza. Acabei de atualizar minhas duas próprias instâncias auto-hospedadas sem nenhum problema.

Há algum plugin incomum, plugin de terceiros ou customizações extensas?

Obrigado… absolutamente nenhum plugin ou personalização pesada… foi essencialmente uma instalação limpa no final de 2020, apenas pequenos ajustes nas configurações via interface de administração do administrador, como permissões de moderador etc. Muito estranho.

Infelizmente, não fiz um backup antes de executar a atualização, embora eu tenha alguns automatizados de alguns dias atrás. Acho que essa é a minha única saída por enquanto… não sendo familiarizado com Ruby, não faço ideia de como resolver esse erro.

Ah, parece que executar ./launcher restart app pelo menos o trouxe de volta online, apesar das atualizações no esquema do banco de dados que foram aplicadas. Antes disso, estava retornando um erro 500. Ufa!

Estes são os itens presentes no diretório de plugins. Estou assumindo que vieram com a instalação principal, pois não adicionei nenhum manualmente.

root@redmine-app:/var/www/discourse# ls -al plugins/
total 12
drwxr-xr-x 22 discourse discourse 4096 Nov  4 04:54 .
drwxr-xr-x 56 discourse discourse 4096 Jan 22 04:55 ..
drwxr-xr-x 13 discourse discourse   43 Nov  4 04:54 discourse-details
drwxr-xr-x 16 discourse discourse   54 Nov  4 04:54 discourse-local-dates
drwxr-xr-x 20 discourse discourse   69 Jan 22 04:55 discourse-narrative-bot
drwxr-xr-x 11 discourse discourse   59 Nov  4 04:54 discourse-presence
drwxr-xr-x 19 discourse root      4096 Jan 22 04:43 docker_manager
drwxr-xr-x  4 discourse discourse   51 Sep 28 05:11 lazy-yt
drwxr-xr-x 25 discourse discourse   99 Nov  4 04:54 poll
drwxr-xr-x  8 discourse www-data   129 Nov  4 04:54 styleguide

O tema do site está um pouco quebrado após a reinicialização, imagino que porque os assets não tenham terminado de compilar… Será que há uma maneira de finalizar isso manualmente?

Esta é a seção no arquivo JS do vendor sobre a qual ele está reclamando:

// permite que importemos isso como um módulo
if (typeof define !== "undefined") {
  define("handlebars", ["exports"], function (__exports__) {
    // Pode não estar definido no lado do servidor, o que é OK para pretty-text
    if (typeof Handlebars !== "undefined") {
      // eslint-disable-next-line
      __exports__.default = Handlebars;
      __exports__.compile = function () {
        // eslint-disable-next-line
        return Handlebars.compile(...arguments);
      };
    }
  });

  define("handlebars-compiler", ["exports"], function (__exports__) {
    // eslint-disable-next-line
    __exports__.default = Handlebars.compile;
  });
}
;

A linha 1850 (que gera o erro) é este trecho:

        return Handlebars.compile(...arguments);

Existe alguma solução temporária que eu possa aplicar aqui para contornar o problema? Ou esse arquivo será gerado a cada vez que eu tentar fazer a atualização? (P.S.: ele acha que atualizei completamente após a reinicialização… mas o tema está quebrado… estou me perguntando se consigo passar por essa etapa de alguma forma ou se terei que restaurar a partir de um backup, basicamente…)

Toda aquela seção do código vem deste arquivo:

app/assets/javascripts/handlebars-shim.js

Acho que o uglify-js interpreta return Handlebars.compile(...arguments); como um erro de sintaxe.

O que não entendo é como isso poderia ser exclusivo da minha instalação, já que tudo está dentro do contêiner Docker.

Acho que isso veio deste commit? DEV: Sync up more Ember CLI features (#11790) · discourse/discourse@83347ac · GitHub

OK - então não sei o motivo, mas executei o processo de atualização manual (git pull; ./launcher rebuild app) e funcionou.

Muitas outras atividades, como atualizações do PostgreSQL etc., foram incluídas nessa atualização manual.

Minha suposição: algo naquele commit acima não era compatível com o uglify-js, a versão do Rails ou outra coisa no contêiner original. Era basicamente uma atualização que exigia o processo de atualização ‘manual’.

Como a interface de administração da web me permitiu atualizar o docker_manager e depois o próprio aplicativo Discourse, assumi que isso não seria necessário (sei que às vezes ela indica que uma atualização via administração da web não pode ser feita e que deve ser feita manualmente… mas isso não aconteceu neste caso e provavelmente deveria ter acontecido…)

Obrigado pela ajuda de qualquer forma.

A mesma coisa aconteceu comigo — a atualização pela web falhou com o erro “Unexpected token: punc”, mas o pull/reconstrução manual funcionou.

Também tive um problema ao executar esta atualização (atualização da Web) :frowning:
Após executar estes comandos:
cd /var/discourse
git pull
./launcher rebuild app
o Discourse está funcionando, mas não é possível acessar o painel de administração (/admin)

A atualização do Ubuntu ajudou a restaurar o funcionamento.

O anúncio dizia que seria necessário fazer uma reconstrução pela linha de comando. Não tenho certeza do motivo pelo qual a interface web não soube impor isso.

Curiosamente, eu estava tentando usar essa funcionalidade em dev e ela não está funcionando para mim… O objeto Handlebars tem apenas create(), não compile(), embora eu possa estar no caminho errado… Já abri um tópico aqui: Adding a bespoke raw template