Il contenuto statico non viene caricato dopo l'aggiornamento


25

Dopo l'aggiornamento da Magento 2.1.0 a Magento 2.1.3 (utilizzando il compositore) il contenuto statico non viene più caricato. Nella console del browser posso vedere che tutti i file non sono disponibili (404):

anteprima file non disponibile

Non vedo le directory con il nome version*nella pubdirectory.

Quello che ho già fatto ma non ha aiutato:

  1. impostare tutte le autorizzazioni su 777, ma senza successo.
  2. cache pulita
  3. rimosso il pub/static/*
  4. contenuto statico rigenerato alcune volte
  5. sostituito il .htaccessfile (nella pub/staticdirectory) con il file da un repository ufficiale.

Un'altra informazione:

  • mod_rewrite è abilitato
  • FollowSymLinksè consentito (nella configurazione host predefinita e locale .htaccess)
  • Questa configurazione ha funzionato bene con Magento 2.1.0 prima dell'aggiornamento alla 2.1.3
  • pub/static è scrivibile

Eventuali suggerimenti?


Hai ridistribuito il contenuto statico?
— Eamonn,

Sì, l'ho fatto molte volte senza successo
— Siarhey Uchukhlebau il

Sto riscontrando lo stesso problema, votato. Nel mio caso sto usando Nginx e gli stessi file conf. L'aggiornamento è stato fatto usando il compositore e ha fatto gli stessi passaggi di @SiarheyUchukhlebau
— Kevin Chavez,

Oh caro. Improvvisamente ha avuto lo stesso problema, ma usando Apache. La cancellazione di pub / static lo ha disattivato e non riesco a risolverlo.
— Eamonn,

Potrebbe aver trovato una soluzione di seguito.
— Eamonn,

Risposte:


28

Il problema principale è stato causato dal lavoro di riscrittura errato (come ha detto @Marius). Non ce n'era RewriteBase nella mia directory pub/static/e Apache non riusciva a trovare i file perché cercati dalla cartella principale. Dopo aver aggiunto: RewriteBase /pub/statictutto inizia a funzionare.

Come ha funzionato:

da questo indirizzo:

http: //m2.uchuhlebov.web.ra/pub/static/version1481885888/frontend/Magento/luma/en_US/mage/requirejs/mixins.js

la riscrittura dovrebbe funzionare:

RewriteRule ^version.+?/(.+)$ $1 [L]

come la linea è iniziata dalla cartella principale:

/pub/static/version...

non ha funzionato e non è stato possibile reindirizzare al file, necessario.

Riscrivi senza base:

la riscrittura non funziona

Riscrivi con base:

riscrivi opere

Ecco una parte del mio .htaccessfile dal pub/static(riscrive):

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteBase /pub/static
    # Remove signature of the static files that is used to overcome the browser cache
    RewriteRule ^version.+?/(.+)$ $1 [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-l

    RewriteRule .* ../static.php?resource=$0 [L]
</IfModule>

Come disabilitare il controllo delle versioni dei file statici:

Se non si desidera utilizzare il controllo delle versioni dei file statici, è possibile disabilitare questa funzione nell'area di amministrazione di Magento:

config

È possibile modificare questa impostazione per ambito predefinito utilizzando la seguente query MySQL :

INSERT INTO `core_config_data`(`path`, `value`) VALUES ('dev/static/sign', 0) ON DUPLICATE KEY UPDATE `value`=0

Quindi eseguire il comando successivo per cancellare una cache di configurazione:

bin/magento cache:clean config

PS: la mia risposta è effettiva per gli utenti di apache2. Se stai usando NGINX vedi questa risposta (di @ kevin-javitz)


se dev/static/signesiste esiste quindi inserirlo. INSERT INTO core_config_data (scope, scope_id, path, value) VALUES ('default', 0, 'dev/static/sign', '0')
— Dhaduk Mitesh,

Sui sistemi apache2, devi abilitare mod_rewrite con: - sudo a2enmod rewrite.
— Dallas Clarke,

8

Se stai eseguendo Nginx, ecco la soluzione. Probabilmente hai il tuo file conf, devi aggiornare / static / part con questo, ne hanno aggiornato una parte in particolare: # Rimuovi la firma dei file statici che viene utilizzata per superare la sezione cache del browser:

location /static/ {
    # Uncomment the following line in production mode
    # expires max;

    # Remove signature of the static files that is used to overcome the browser cache
    location ~ ^/static/version {
        rewrite ^/static/(version\d*/)?(.*)$ /static/$2 last;
    }

    location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2)$ {
        add_header Cache-Control "public";
        add_header X-Frame-Options "SAMEORIGIN";
        expires +1y;

        if (!-f $request_filename) {
            rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last;
        }
    }
    location ~* \.(zip|gz|gzip|bz2|csv|xml)$ {
        add_header Cache-Control "no-store";
        add_header X-Frame-Options "SAMEORIGIN";
        expires    off;

        if (!-f $request_filename) {
           rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last;
        }
    }
    if (!-f $request_filename) {
        rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last;
    }
    add_header X-Frame-Options "SAMEORIGIN";
}

Nota aggiuntiva, se stai usando apache assicurati di averlo nel tuo pub / static / .htaccess line 16:RewriteRule ^version.+?/(.+)$ $1 [L]
— Kevin Chavez il

Grazie per la tua risposta, mi ha indicato la soluzione corretta del problema. Uso Apache e la soluzione è diversa, ma ti sono comunque grato.
— Siarhey Uchukhlebau,

Sei una vita più sicura! Stavo sbattendo la testa contro il muro! Posso confermare che funziona per il mio nginx Magento 2.1.3
— Cudos

6

Vai al database e inserisci una riga nella tabella core_config_data:

INSERT INTO core_config_data (scope, scope_id, path, value) VALUES ('default', 0, 'dev/static/sign', '0');

Eccezionale!! Grazie.
— lkk

4

Non ci dovrebbe essere una version*cartella nella staticcartella.
Questo molto probabilmente accade perché non hai abilitato mod_rewrite nella tua istanza.
Il percorso pub/static/version1234/some/asset.jsdeve essere riscritto pub/static/some/asset.js. La versione della versione è lì solo per la scadenza della cache del browser.


Controllo mod_rewrite ed è abilitato: [root@web www]# httpd -M | grep "rewrite" rewrite_module (shared) Syntax OKnel .htaacess è abilitato anche
— Siarhey Uchukhlebau il

assicurarsi che FollowSymLinkssia permesso. Questo mi è successo dopo aver installato l'ultima versione di github e ho avuto un problema con mod_rewrite e con FollowSymLinks.
— Marius

Nella sezione di riscrittura FollowSymLinksè impostato come Options +FollowSymLinkse non c'era nessun problema con la stessa configurazione prima
— dell'aggiornamento

4

Sembra che la versione 2.1.3 presupponga che il valore predefinito Stores => Configuration => Developer => Static Files Settings => Sign Static Filessia impostato su Sì.

Quindi, invece di modificare le riscritture, è possibile impostare questa funzione su No.

Se non è possibile farlo dall'amministratore, poiché l'amministratore non riesce a caricare gli asset front-end, modificare / aggiungere questa impostazione nella core_config_datatabella:

scope: default
scope_id: 0
path: dev / static / sign
value: 0

Questo problema è anche presente su Github: https://github.com/magento/magento2/issues/7869


2

Se stai usando apache. Non è necessario eliminare .htaccess da pub / static. Puoi ottenere una sostituzione qui.


Grazie. Ho già sostituito quel file, ma il problema era errato RewriteBase.
— Siarhey Uchukhlebau,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.