O conteúdo estático não está sendo carregado após a atualização

25

Após a atualização do Magento 2.1.0 para o Magento 2.1.3 (usando o compositor), o conteúdo estático não está mais carregando. No console do navegador, vejo que todos os arquivos estão indisponíveis (404):

visualização indisponível de arquivos

Não vejo diretórios com o nome version*no pubdiretório

O que eu já fiz, mas não ajudou:

  1. defina todas as permissões para 777, mas sem sucesso.
  2. cache limpo
  3. removeu o pub/static/*
  4. conteúdo estático regenerado algumas vezes
  5. substituiu o .htaccessarquivo (no pub/staticdiretório) pelo arquivo de um repositório oficial.

Outra informação:

  • mod_rewrite está ativado
  • FollowSymLinksé permitido (na configuração do host padrão e local .htaccess)
  • Essa configuração funcionou bem com o Magento 2.1.0 antes da atualização para o 2.1.3
  • pub/static é gravável

Alguma sugestão?

Siarhey Uchukhlebau
fonte
Você reimplantou o conteúdo estático?
Eamonn
Sim, eu fiz isso muitas vezes sem sucesso
Siarhey Uchukhlebau 15/12/16
Estou tendo o mesmo problema, com voto positivo. No meu caso, estou usando o Nginx e os mesmos arquivos conf. Atualização foi feita usando compositor, e fez os mesmos passos que @SiarheyUchukhlebau fez
Kevin Chavez
Oh céus. De repente, tive o mesmo problema, mas usando o Apache. Limpar o pub / static está desativado e não consigo corrigi-lo.
Eamonn
Pode ter encontrado uma solução abaixo.
Eamonn

Respostas:

28

O principal problema foi causado pelo trabalho de reescrita incorreto (como @Marius disse). Não havia RewriteBase no meu diretório pub/static/e o Apache não conseguiu encontrar os arquivos porque os procurou na pasta raiz. Depois de adicionar: RewriteBase /pub/statictudo começa a funcionar.

Como funcionou:

por este endereço:

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

a reescrita deve funcionar:

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

como a linha começou na pasta raiz:

/pub/static/version...

não funcionou e não pôde redirecionar para o arquivo, necessário.

Reescreva sem base:

reescrever não funciona

Reescreva com base:

reescrever obras

Aqui uma parte do meu .htaccessarquivo do pub/static(reescreve):

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

Como desativar o controle de versão de arquivos estáticos:

Se você não quiser usar o controle de versão de arquivos estáticos, poderá desativar esse recurso na área administrativa do Magento:

config

É possível alterar essa configuração para o escopo padrão usando a seguinte consulta MySQL :

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

Em seguida, execute o próximo comando para limpar um cache de configuração:

bin/magento cache:clean config

PS: Minha resposta é real para os usuários do apache2. Se você estiver usando o NGINX, veja esta resposta (por @ kevin-javitz)

Siarhey Uchukhlebau
fonte
se dev/static/signexistir, insira-o. INSERT INTO core_config_data (scope, scope_id, path, value) VALUES ('default', 0, 'dev/static/sign', '0')
Dhaduk Mitesh
Nos sistemas apache2, você precisa ativar o mod_rewrite com: - sudo a2enmod rewrite.
Dallas Clarke
8

Se você estiver executando o Nginx, aqui está a correção. Você provavelmente tem seu próprio arquivo conf, é necessário atualizar a parte / static / com isso, eles atualizaram parte especificamente: # Remova a assinatura dos arquivos estáticos que são usados ​​para superar a seção de cache do 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
fonte
Observação adicional, se você estiver usando o apache, verifique se o possui na linha 16 do pub / static / .htaccess:RewriteRule ^version.+?/(.+)$ $1 [L]
Kevin Chavez
Obrigado pela sua resposta, ele me indicou a solução correta do problema. Eu uso o Apache e a solução é diferente, mas sou grato a você de qualquer maneira.
Siarhey Uchukhlebau
Você é uma vida mais segura! Eu estava batendo com a cabeça na parede! Posso confirmar que ele funciona para o meu nginx Magento 2.1.3
Cudos
6

Acesse o banco de dados e insira uma linha na tabela core_config_data:

INSERT INTO core_config_data (scope, scope_id, path, value) VALUES ('default', 0, 'dev/static/sign', '0');
Saphal Jha
fonte
Impressionante!! Obrigado.
l00k
4

Não deve haver uma version*pasta na staticpasta.
Provavelmente isso acontece porque você não tem o mod_rewrite ativado em sua instância.
O caminho pub/static/version1234/some/asset.jsdeve ser reescrito para pub/static/some/asset.js. A versão só existe para expiração do cache do navegador.

Marius
fonte
Eu verifico mod_rewrite e está habilitado: [root@web www]# httpd -M | grep "rewrite" rewrite_module (shared) Syntax OKno .htaacess também está habilitado #
Siarhey Uchukhlebau
verifique se FollowSymLinksé permitido. Isso aconteceu comigo depois de instalar a versão mais recente do github e tive um problema com o mod_rewrite e com o FollowSymLinks.
Marius
Na seção de reescrita FollowSymLinksestá definido como Options +FollowSymLinkse não houve problema com a mesma configuração antes da atualização :(
Siarhey Uchukhlebau
4

Parece que a versão 2.1.3 assume que o valor padrão para Stores => Configuration => Developer => Static Files Settings => Sign Static Filesestá definido como Sim.

Portanto, em vez de alterar as reescritas, é possível definir esse recurso como Não.

Se não for possível fazer isso pelo administrador, porque o administrador falha ao carregar os recursos de front-end, altere / adicione esta configuração na core_config_datatabela:

escopo: padrão
scope_id: 0
caminho: dev / static / sign
value: 0

Esta questão também está anotada no Github: https://github.com/magento/magento2/issues/7869

nbjohan
fonte
2

Se você estiver usando apache. Você não deve excluir o .htaccess de pub / static. Você pode obter uma substituição aqui.

Eamonn
fonte
Obrigado. Já substitui esse arquivo, mas o problema estava incorreto RewriteBase.
Siarhey Uchukhlebau