El contenido estático no se carga después de la actualización

25

Después de la actualización de Magento 2.1.0 a Magento 2.1.3 (usando el compositor), el contenido estático ya no se carga. En la consola del navegador puedo ver que todos los archivos no están disponibles (404):

Vista previa de archivos no disponibles

No veo directorios con el nombre version*en el pubdirectorio.

Lo que ya hice pero no ayudó:

  1. establecer todos los permisos a 777, pero sin éxito.
  2. caché limpio
  3. retiró el pub/static/*
  4. contenido estático regenerado pocas veces
  5. reemplazó el .htaccessarchivo (en el pub/staticdirectorio) con el archivo de un repositorio oficial.

Otra informacion:

  • mod_rewrite está habilitado
  • FollowSymLinksestá permitido (en la configuración de host predeterminada y local .htaccess)
  • Esta configuración funcionó bien con Magento 2.1.0 antes de la actualización a la 2.1.3
  • pub/static es escribible

¿Alguna sugerencia?

Siarhey Uchukhlebau
fuente
¿Replegaste contenido estático?
Eamonn
Sí, lo hice muchas veces sin éxito
Siarhey Uchukhlebau
Tengo el mismo problema, voté a favor. En mi caso estoy usando Nginx y los mismos archivos conf. La actualización se realizó utilizando el compositor, e hizo los mismos pasos que @SiarheyUchukhlebau
Kevin Chavez, el
Oh querido. De repente tengo el mismo problema, pero usando Apache. Borrar pub / static lo activó y parece que no puedo solucionarlo.
Eamonn
Puede haber encontrado una solución a continuación.
Eamonn

Respuestas:

28

El problema principal fue causado por el trabajo incorrecto de reescritura (como dijo @Marius). No había RewriteBase en mi directorio pub/static/y Apache no pudo encontrar los archivos porque los buscó desde la carpeta raíz. Después de agregar: RewriteBase /pub/statictodo comienza a funcionar.

Cómo funcionó:

por esta dirección:

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

la reescritura debería funcionar:

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

como la línea comenzó desde la carpeta raíz:

/pub/static/version...

no ha funcionado y no pudo redirigir al archivo, necesario.

Reescribir sin base:

reescribir no funciona

Reescribe con base:

reescribir obras

Aquí una parte de mi .htaccessarchivo de pub/static(reescribe):

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

Cómo deshabilitar el versionado de archivos estáticos:

Si no desea utilizar versiones de archivos estáticos, puede desactivar esta función en el área de administración de Magento:

config

Es posible cambiar esta configuración para el alcance predeterminado utilizando la siguiente consulta MySQL :

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

Luego ejecute el siguiente comando para borrar una caché de configuración:

bin/magento cache:clean config

PD: Mi respuesta es real para los usuarios de apache2. Si está utilizando NGINX, vea esta respuesta (por @ kevin-javitz)

Siarhey Uchukhlebau
fuente
si dev/static/signen existe, entonces insértelo. INSERT INTO core_config_data (scope, scope_id, path, value) VALUES ('default', 0, 'dev/static/sign', '0')
Dhaduk Mitesh
En los sistemas apache2, debe habilitar mod_rewrite con: - sudo a2enmod rewrite.
Dallas Clarke
8

Si está ejecutando Nginx, aquí está la solución. Probablemente tenga su propio archivo conf, necesita actualizar la parte / static / con esto, ellos han actualizado parte de él específicamente: # Elimine la firma de los archivos estáticos que se utilizan para superar la sección de caché del navegador:

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
fuente
Nota adicional, si está usando Apache, asegúrese de tener esto en su línea 16 pub / static / .htaccess:RewriteRule ^version.+?/(.+)$ $1 [L]
Kevin Chavez
Gracias por su respuesta, me señaló la solución correcta del problema. Uso Apache y la solución es diferente, pero de todos modos te estoy agradecido.
Siarhey Uchukhlebau
¡Eres una vida más segura! ¡Estaba golpeando mi cabeza contra la pared! Puedo confirmar que funciona para mi nginx Magento 2.1.3
Cudos
6

Vaya a la base de datos e inserte una fila en la tabla core_config_data:

INSERT INTO core_config_data (scope, scope_id, path, value) VALUES ('default', 0, 'dev/static/sign', '0');
Saphal Jha
fuente
¡¡Increíble!! Gracias.
l00k
4

No debería haber una version*carpeta en la staticcarpeta.
Esto probablemente ocurre porque no tiene habilitado mod_rewrite en su instancia.
La ruta pub/static/version1234/some/asset.jsdebe reescribirse pub/static/some/asset.js. Lo de la versión está ahí solo para la caducidad de la memoria caché del navegador.

Marius
fuente
Compruebo mod_rewrite y está habilitado: [root@web www]# httpd -M | grep "rewrite" rewrite_module (shared) Syntax OKen el .htaacess también está habilitado
Siarhey Uchukhlebau
Asegúrate de que FollowSymLinksesté permitido. Esto me sucedió después de instalar la última versión de github y tuve un problema con mod_rewrite y con FollowSymLinks.
Marius
En la sección de reescritura FollowSymLinksse establece como Options +FollowSymLinksy no hubo ningún problema con la misma configuración antes de actualizar :(
Siarhey Uchukhlebau
4

Parece que la versión 2.1.3 supone que el valor predeterminado para Stores => Configuration => Developer => Static Files Settings => Sign Static Filesestá establecido en Sí.

Entonces, en lugar de cambiar las reescrituras, es posible establecer esta función en No.

Si no es posible hacer esto desde el administrador, porque el administrador no puede cargar los activos frontend, cambie / agregue esta configuración en la core_config_datatabla:

alcance: por defecto
alcance_id: 0
ruta: dev / static / sign
valor: 0

Este problema también se observa en Github: https://github.com/magento/magento2/issues/7869

nbjohan
fuente
2

Si estás usando apache. No debe eliminar .htaccess de pub / static. Puede obtener un reemplazo aquí.

Eamonn
fuente
Gracias. Ya he reemplazado ese archivo, pero el problema era incorrecto RewriteBase.
Siarhey Uchukhlebau