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?

Siarhey Uchukhlebau
la source
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)

Siarhey Uchukhlebau
la source
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";
}
Kevin Chavez
la source
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');
Saphal Jha
la source
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.

Marius
la source
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

nbjohan
la source
2

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

Eamonn
la source
Merci. J'ai déjà remplacé ce fichier, mais le problème était incorrect RewriteBase.
Siarhey Uchukhlebau