Le contenu statique ne se charge pas après la mise à niveau


25

Après la mise à niveau de Magento 2.1.0 vers Magento 2.1.3 (en utilisant le compositeur), le contenu statique ne se charge plus. Dans la console du navigateur, je peux voir que tous les fichiers ne sont pas disponibles (404):

fichiers non disponibles aperçu

Je ne vois pas de répertoires avec le nom version*dans le pubrépertoire.

Ce que j'ai déjà fait mais cela n'a pas aidé:

  1. définissez toutes les autorisations sur 777, mais sans succès.
  2. cache nettoyé
  3. Enlevé le pub/static/*
  4. contenu statique régénéré plusieurs fois
  5. remplacé le .htaccessfichier (dans le pub/staticrépertoire) par le fichier d'un référentiel officiel.

Une autre info:

  • mod_rewrite est autorisé
  • FollowSymLinksest autorisé (dans la configuration d'hôte par défaut et local .htaccess)
  • Cette configuration a bien fonctionné avec Magento 2.1.0 avant la mise à jour vers la 2.1.3
  • pub/static est accessible en écriture

Aucune suggestion?


Avez-vous redéployé du contenu statique?
Eamonn

Oui, je l'ai fait plusieurs fois sans succès
Siarhey Uchukhlebau

J'ai le même problème, voté positivement. Dans mon cas, j'utilise Nginx et les mêmes fichiers de conf. La mise à jour a été effectuée à l'aide de composer, et a fait les mêmes étapes que @SiarheyUchukhlebau
Kevin Chavez

Oh cher. Soudain, j'ai eu le même problème, mais en utilisant Apache. Effacer le pub / statique l'a désactivé et je n'arrive pas à le réparer.
Eamonn

Peut avoir trouvé une solution ci-dessous.
Eamonn

Réponses:


28

Le problème principal était dû au travail de réécriture incorrect (comme l'a dit @Marius). Il n'y RewriteBase en avait pas dans mon répertoire pub/static/et Apache n'a pas pu trouver les fichiers car ils les ont recherchés dans le dossier racine. Après avoir ajouté: RewriteBase /pub/statictout commence à fonctionner.

Comment cela a fonctionné:

par cette adresse:

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

la réécriture devrait fonctionner:

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

comme la ligne a commencé à partir du dossier racine:

/pub/static/version...

cela n'a pas fonctionné et n'a pas pu rediriger vers le fichier, nécessaire.

Réécrire sans base:

réécrire ne fonctionne pas

Réécrire avec la base:

réécrire les œuvres

Voici une partie de mon .htaccessdossier du pub/static(réécrit):

<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>

Comment désactiver la version des fichiers statiques:

Si vous ne souhaitez pas utiliser de version de fichiers statiques, vous pouvez désactiver cette fonctionnalité dans la zone d'administration de Magento:

config

Il est possible de modifier ce paramètre pour la portée par défaut à l'aide de la requête MySQL suivante :

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

Exécutez ensuite la commande suivante pour effacer un cache de configuration:

bin/magento cache:clean config

PS: Ma réponse est réelle pour les utilisateurs d'apache2. Si vous utilisez NGINX, voyez cette réponse (par @ kevin-javitz)


s'il dev/static/signexiste, insérez-le. INSERT INTO core_config_data (scope, scope_id, path, value) VALUES ('default', 0, 'dev/static/sign', '0')
Dhaduk Mitesh

Sur les systèmes apache2, vous devez activer mod_rewrite avec: - sudo a2enmod rewrite.
Dallas Clarke

8

Si vous utilisez Nginx, voici le correctif. Vous avez probablement votre propre fichier conf, vous devez mettre à jour la partie / statique / avec cela, ils en ont mis à jour une partie spécifiquement: # Supprimez la signature des fichiers statiques qui est utilisée pour surmonter la section de cache du navigateur:

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";
}

Remarque supplémentaire, si vous utilisez apache, assurez-vous de l'avoir dans votre pub / statique / .htaccess ligne 16:RewriteRule ^version.+?/(.+)$ $1 [L]
Kevin Chavez

Merci pour votre réponse, elle m'a indiqué la bonne solution du problème. J'utilise Apache et la solution est différente, mais je vous en suis quand même reconnaissant.
Siarhey Uchukhlebau

Vous êtes une vie plus sûre! Je me cognais la tête contre le mur! Peut confirmer que cela fonctionne pour mon nginx Magento 2.1.3
Cudos

6

Accédez à la base de données et insérez une ligne dans la table core_config_data:

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

Impressionnant!! Merci.
l00k

4

Il ne devrait pas y avoir de version*dossier dans le staticdossier.
Cela se produit très probablement car vous n'avez pas activé mod_rewrite dans votre instance.
Le chemin pub/static/version1234/some/asset.jsdoit être réécrit pub/static/some/asset.js. La version n'est là que pour l'expiration du cache du navigateur.


Je vérifie mod_rewrite et il est activé: [root@web www]# httpd -M | grep "rewrite" rewrite_module (shared) Syntax OKdans le .htaacess, il est également activé
Siarhey Uchukhlebau

assurez-vous que cela FollowSymLinksest autorisé. Cela m'est arrivé après avoir installé la dernière version de github et j'ai eu un problème avec le mod_rewrite et avec les FollowSymLinks.
Marius

Dans la section de réécriture FollowSymLinksest définie comme Options +FollowSymLinkset il n'y avait aucun problème avec la même configuration avant la mise à jour :(
Siarhey Uchukhlebau

4

Il semble que la version 2.1.3 suppose la valeur par défaut pour Stores => Configuration => Developer => Static Files Settings => Sign Static Files est définie sur Oui.

Ainsi, au lieu de modifier les réécritures, il est possible de définir cette fonction sur Non.

S'il n'est pas possible de le faire à partir de l'administrateur, car l'administrateur ne parvient pas à charger les actifs frontaux, modifiez / ajoutez ce paramètre dans le core_config_datatableau:

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

Ce problème est également noté sur Github: https://github.com/magento/magento2/issues/7869


2

Si vous utilisez apache. Vous ne devez pas supprimer le .htaccess de pub / static. Vous pouvez obtenir un remplacement ici.


Merci. J'ai déjà remplacé ce fichier, mais le problème était incorrect RewriteBase.
Siarhey Uchukhlebau
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.