Aggiornamento fallito da v2.7.0.beta1 a v2.7.0.beta2

Si prega di consultare questo gist gist:86508bebb133a06f79fadaeba345e3d6 · GitHub

Si tratta di un’installazione standard e autonoma di Discourse, che tenta di aggiornare da v2.7.0.beta1 a v2.7.0.beta2

L’errore si verifica qui:

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'"
Errore di analisi in _vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js:1850,34
        return Handlebars.compile(...arguments);
                                  ^
ERRORE: Token imprevisto: 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: Nessun file o 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
(Vedi la traccia completa eseguendo il task con --trace)
Docker Manager: AGGIORNAMENTO FALLITO

Avete qualche idea? Di conseguenza, il sito è offline. Grazie.

È un po’ inquietante. Hai finito lo spazio su disco o qualcosa di simile?

2 Mi Piace

Ciao, no - sull’host ci sono 70 GB liberi. Solo l’1% degli inode è in uso.

Ho assunto che l’errore “no such file or directory” fosse solo un effetto collaterale di questo:

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

Quel file esiste sicuramente:

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
1 Mi Piace

Non sono sicuro. Ho appena aggiornato le mie due istanze self-hostate senza alcun problema.

Ci sono plugin insoliti, plugin di terze parti o personalizzazioni estese?

Grazie… assolutamente nessun plugin o personalizzazioni pesanti… era essenzialmente una nuova installazione alla fine del 2020, solo piccole modifiche alle impostazioni tramite l’interfaccia di amministrazione per cose come i permessi dei moderatori, ecc. Molto strano.

Purtroppo non ho fatto un backup prima di eseguire l’aggiornamento, anche se ne ho alcuni automatizzati di un paio di giorni fa. Immagino che questa sia l’unica via d’uscita per ora… non avendo familiarità con Ruby, non ho idea di come risolvere quell’errore.

Ah, sembra che l’esecuzione di ./launcher restart app abbia almeno riportato tutto online, nonostante gli aggiornamenti dello schema del database eseguiti. Prima di ciò, restituiva un errore 500. Uff!

1 Mi Piace

Questi sono i contenuti della directory dei plugin; presumo siano stati installati con l’installazione di base, dato che non ne ho aggiunti 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

Il tema del sito è un po’ rotto dopo il riavvio, immagino perché le risorse non erano state completate nella compilazione… mi chiedo se ci sia un modo per portarlo a termine manualmente.

Questa è la sezione nel file JS del fornitore su cui sta segnalando un problema:

// permette di importarlo come modulo
if (typeof define !== "undefined") {
  define("handlebars", ["exports"], function (__exports__) {
    // Potrebbe non essere definito lato server, il che va bene per 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;
  });
}
;

La riga 1850 (quella che genera l’errore) è questo frammento:

        return Handlebars.compile(...arguments);

Esiste qualche workaround temporaneo che potrei applicare qui per superare il problema? O quel file verrà generato ogni volta che provo ad aggiornare? (P.S. Dopo il riavvio, il sistema pensa che l’aggiornamento sia stato completato, ma il tema è rotto… mi chiedo se ci sia un modo per superare questo passaggio o se dovrò ripristinare dal backup, fondamentalmente…)

1 Mi Piace

Quella sezione di codice proviene da questo file:

app/assets/javascripts/handlebars-shim.js

Immagino che uglify-js veda return Handlebars.compile(...arguments); come un errore di sintassi.

Quello che non capisco è come questo possa essere unico alla mia installazione, dato che tutto è all’interno del contenitore Docker..

Immagino che sia arrivato da questo commit? DEV: Sync up more Ember CLI features (#11790) · discourse/discourse@83347ac · GitHub

OK - quindi non so perché, ma ho eseguito il processo di aggiornamento manuale (git pull; ./launcher rebuild app) e ha funzionato.

Molte altre attività, come gli aggiornamenti di PostgreSQL, ecc., sono state eseguite come parte di questo aggiornamento manuale.

La mia ipotesi: qualcosa in quel commit sopra non era compatibile con uglify-js o la versione di Rails o altro, sul contenitore originale. Era essenzialmente un aggiornamento che richiedeva il processo di aggiornamento ‘manuale’.

Poiché l’interfaccia di amministrazione web mi ha permesso di aggiornare docker_manager e poi l’applicazione Discourse stessa, ho pensato che non fosse necessario (so che a volte indica che un aggiornamento tramite l’amministratore web non può essere eseguito e che è necessario farlo manualmente… ma in questo caso non è successo, e probabilmente avrebbe dovuto succedere…)

Grazie comunque per il tuo aiuto

2 Mi Piace

È successo lo stesso anche a me: l’aggiornamento web è fallito con l’errore “Unexpected token: punc”, mentre il pull/rebuild manuale ha funzionato.

1 Mi Piace

Ho avuto anche io un problema durante l’esecuzione di questo aggiornamento (aggiornamento Web) :frowning:
Dopo aver eseguito questi comandi:
cd /var/discourse
git pull
./launcher rebuild app
Discourse funziona, ma non è possibile accedere al pannello di amministrazione (/admin)

L’aggiornamento di ubuntu ha aiutato a ripristinare il funzionamento

2 Mi Piace

L’annuncio ha indicato che sarebbe stato necessario eseguire una ricostruzione da riga di comando. Non sono sicuro del motivo per cui l’interfaccia web non abbia saputo imporre tale requisito.

2 Mi Piace

Stranamente, stavo proprio cercando di usare quella funzionalità in dev e non funziona per me… L’oggetto Handlebars ha solo create(), non compile(), anche se potrei stare sbagliando strada… Ne ho parlato qui: Adding a bespoke raw template