Zawartość statyczna nie ładuje się po aktualizacji

25

Po aktualizacji z Magento 2.1.0 do Magento 2.1.3 (przy użyciu kompozytora) zawartość statyczna nie jest już ładowana. W konsoli przeglądarki widzę, że wszystkie pliki są niedostępne (404):

podgląd plików niedostępny

Nie widzę katalogów z nazwą version*w pubkatalogu.

Co już zrobiłem, ale to nie pomogło:

  1. ustaw wszystkie uprawnienia na 777, ale bez powodzenia.
  2. wyczyszczona pamięć podręczna
  3. usunięto pub/static/*
  4. zregenerowana zawartość statyczna kilka razy
  5. zastąpił .htaccessplik (w pub/statickatalogu) plikiem z oficjalnego repozytorium.

Kolejna informacja:

  • mod_rewrite jest włączony
  • FollowSymLinksjest dozwolone (w domyślnej konfiguracji hosta i lokalnej .htaccess)
  • Ta konfiguracja działała dobrze z Magento 2.1.0 przed aktualizacją do wersji 2.1.3
  • pub/static jest zapisywalny

Jakieś sugestie?

Siarhey Uchukhlebau
źródło
Czy wdrożyłeś ponownie zawartość statyczną?
Eamonn,
Tak, robiłem to wiele razy bez sukcesu
Siarhey Uchukhlebau,
Mam ten sam problem, głosowałem. W moim przypadku używam Nginx i tych samych plików conf. Aktualizacja została wykonana przy użyciu kompozytora i wykonała te same kroki, co @SiarheyUchukhlebau
Kevin Chavez
O jej. Nagle pojawił się ten sam problem, ale przy użyciu Apache. Czyszczenie pubu / static to wyłączyło i nie mogę tego naprawić.
Eamonn
Mogłem znaleźć rozwiązanie poniżej.
Eamonn

Odpowiedzi:

28

Główny problem był spowodowany nieprawidłową pracą przepisywania (jak powiedział @Marius). W RewriteBase moim katalogu pub/static/nie było i Apache nie mógł znaleźć plików, ponieważ szukał ich z folderu głównego. Po dodaniu: RewriteBase /pub/staticwszystko zaczyna działać.

Jak to działało:

pod tym adresem:

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

przepisywanie powinno działać:

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

gdy linia zaczynała się od folderu głównego:

/pub/static/version...

nie zadziałało i nie mogło przekierować do pliku, potrzebne.

Przepisz bez bazy:

przepisywanie nie działa

Przepisz z bazą:

przepisać działa

Oto część mojego .htaccesspliku z pub/static(przepisuje):

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

Jak wyłączyć wersjonowanie plików statycznych:

Jeśli nie chcesz używać wersji plików statycznych, możesz wyłączyć tę funkcję w obszarze administracyjnym Magento:

config

Można zmienić to ustawienie dla zakresu domyślnego za pomocą następującego zapytania MySQL :

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

Następnie wykonaj następne polecenie, aby wyczyścić pamięć podręczną konfiguracji:

bin/magento cache:clean config

PS: Moja odpowiedź jest aktualna dla użytkowników apache2. Jeśli używasz NGINX, zobacz tę odpowiedź (autor: @ kevin-javitz)

Siarhey Uchukhlebau
źródło
jeśli dev/static/signistnieje, wstaw go. INSERT INTO core_config_data (scope, scope_id, path, value) VALUES ('default', 0, 'dev/static/sign', '0')
Dhaduk Mitesh
W systemach Apache2 musisz włączyć mod_rewrite za pomocą: - sudo a2enmod rewrite.
Dallas Clarke
8

Jeśli korzystasz z Nginx, oto poprawka. Prawdopodobnie masz swój własny plik conf, musisz go zaktualizować / static / part, zaktualizowali jego część w szczególności: # Usuń podpis plików statycznych, które są używane do przezwyciężenia sekcji pamięci podręcznej przeglądarki:

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
źródło
Dodatkowa uwaga, jeśli używasz apache, upewnij się, że masz to w swoim pubie / static / .htaccess linii 16:RewriteRule ^version.+?/(.+)$ $1 [L]
Kevin Chavez
Dziękuję za odpowiedź, wskazało mi prawidłowe rozwiązanie problemu. Używam Apache i rozwiązanie jest inne, ale i tak jestem ci wdzięczny.
Siarhey Uchukhlebau
Jesteś bezpieczniejszy w życiu! Uderzyłem mu głową w ścianę! Potwierdzam, że działa dla mojego nginx Magento 2.1.3
Cudos
6

Przejdź do bazy danych i wstaw wiersz do tabeli core_config_data:

INSERT INTO core_config_data (scope, scope_id, path, value) VALUES ('default', 0, 'dev/static/sign', '0');
Saphal Jha
źródło
Niesamowite!! Dziękuję Ci.
10000
4

version*Folder nie powinien znajdować się w staticfolderze.
Najprawdopodobniej dzieje się tak, ponieważ nie masz włączonego mod_rewrite w swoim wystąpieniu.
Ścieżka pub/static/version1234/some/asset.jspowinna zostać przepisana na pub/static/some/asset.js. Ta wersja jest dostępna tylko dla wygasania pamięci podręcznej przeglądarki.

Marius
źródło
Sprawdzam mod_rewrite i jest włączony: [root@web www]# httpd -M | grep "rewrite" rewrite_module (shared) Syntax OKw .htaacess jest również włączony
Siarhey Uchukhlebau
upewnij się, że FollowSymLinksjest to dozwolone. Zdarzyło mi się to po zainstalowaniu najnowszej wersji z github i miałem problem z mod_rewrite i FollowSymLinks.
Marius
W sekcji przepisywania FollowSymLinksjest ustawiony jako Options +FollowSymLinksi nie było problemu z tą samą konfiguracją przed aktualizacją :(
Siarhey Uchukhlebau
4

Wygląda na to, że wersja 2.1.3 zakłada, że ​​wartość domyślna dla Stores => Configuration => Developer => Static Files Settings => Sign Static Filesjest ustawiona na Tak.

Zamiast zmiany przepisywania możliwe jest ustawienie tej funkcji na Nie.

Jeśli nie jest to możliwe od administratora, ponieważ administrator nie ładuje zasobów interfejsu użytkownika, zmień / dodaj to ustawienie w core_config_datatabeli:

scope: default
scope_id: 0
ścieżka: dev / static / sign
wartość: 0

Ten problem został również odnotowany w Github: https://github.com/magento/magento2/issues/7869

nbjohan
źródło
2

Jeśli używasz apache. Nie wolno usuwać pliku .htaccess z pub / static. Możesz uzyskać zastępstwo tutaj.

Eamonn
źródło
Dziękuję Ci. Plik został już zastąpiony, ale problem był nieprawidłowy RewriteBase.
Siarhey Uchukhlebau