Redis: errore di annullamento della serializzazione setup:static-content:deploy

Questo articolo fornisce una correzione per l'errore di annullamento della serializzazione Redis durante l'esecuzione di magento setup:static-content:deploy.

L'esecuzione di magento setup:static-content:deploy causa l'errore Redis:

[Exception]
Notice: unserialize(): Error at offset 0 of 1 bytes in
/var/www/domain.com/vendor/magento/module-config/App/Config/Type/System.php on line 214

Il problema è causato da processi di interferenza paralleli sulla connessione Redis.

Per risolvere il problema, eseguire setup:static-content:deploy in modalità thread singolo impostando la seguente variabile di ambiente:

STATIC_CONTENT_THREADS =1

in alternativa, eseguire il comando setup:static-content:deploy seguito dall'argomento -j 1 (o --jobs=1 ).

La disattivazione del multithreading rallenta il processo di distribuzione delle risorse statiche.

Versioni interessate

  • Adobe Commerce on-premise: 2.1.2 e successive
  • Adobe Commerce su infrastruttura cloud 2.1.2 e versioni successive
  • Redis, qualsiasi versione

Problema

L'esecuzione del comando setup:static-content:deploy causa l'errore Redis:

)
[2017-06-02 19:57:59] Command:php ./bin/magento setup:static-content:deploy --jobs=3  en_US

[Exception]

Notice: unserialize(): Error at offset 0 of 1 bytes in /app/<domain>/vendor/magento/module-config/App/Config/Type/System.php
on line 214

.....

[CredisException]
read error on connection

[RedisException]
read error on connection

.....

[Exception]

Notice: unserialize(): Error at offset 0 of 1 bytes in /app/<domain>/vendor/magento/module-config/App/Config/Type/System.php
on line 214

.....

[RuntimeException]
Command php ./bin/magento setup:static-content:deploy --jobs=3  en_US  returned code 3

Causa

Il problema è causato da processi di interferenza paralleli sulla connessione Redis.

In questo caso, un processo in App/Config/Type/System.php stava aspettando una risposta per system_defaultweb, ma ha ricevuto una risposta per system_cache_exists che è stata eseguita da un processo diverso. Vedi la spiegazione dettagliata nel post di Jason Woods.

Soluzione

Disattivare il parallelismo ed eseguire setup:static-content:deploy in modalità thread singolo impostando la seguente variabile di ambiente:

STATIC_CONTENT_THREADS =1

È inoltre possibile eseguire il comando setup:static-content:deploy seguito dall'argomento -j 1 (o --jobs=1).

NOTE
Nella modalità a thread singolo, il processo di distribuzione del contenuto statico potrebbe richiedere quattro volte più tempo.

Ulteriori informazioni

Nella documentazione per gli sviluppatori:

recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a