Статичний вміст не завантажується після оновлення


25

Після оновлення з Magento 2.1.0 до Magento 2.1.3 (з використанням композитора) статичний вміст більше не завантажується. На консолі браузера я бачу, що всі файли недоступні (404):

недоступний попередній перегляд файлів

Я не бачу каталогів з назвою version*в pubкаталозі.

Що я вже зробив, але це не допомогло:

  1. встановити всі дозволи 777, але без успіху.
  2. очищений кеш
  3. видалено pub/static/*
  4. регенерований статичний вміст кілька разів
  5. замінив .htaccessфайл (у pub/staticкаталозі) на файл з офіційного сховища.

Інша інформація:

  • mod_rewrite включено
  • FollowSymLinksдозволено (у конфігурації хоста за замовчуванням та локальній .htaccess)
  • Ця конфігурація спрацювала добре з Magento 2.1.0 до оновлення до 2.1.3
  • pub/static є записаним

Будь-які пропозиції?


Ви перерозподілили статичний вміст?
Еймон

Так, я це робив багато разів без успіху
Сіархей Учукхлебау

У мене те ж саме питання, анульоване. У моєму випадку я використовую Nginx і ті самі файли conf. Оновлення було зроблено за допомогою композитора, і було зроблено ті ж кроки, що і @SiarheyUchukhlebau
Кевін Чавес

О Боже. Раптом виникла та сама проблема, але за допомогою Apache. Якщо очистити паб / статику, вимкніть її, і я не можу це виправити.
Еймон

Можливо, знайшли рішення нижче.
Еймон

Відповіді:


28

Основна проблема була викликана неправильним твором переписувань (як розповів @Marius). У RewriteBase моєму каталозі не було, pub/static/і Apache не міг знайти файли, оскільки шукав їх у кореневій папці. Після того, як ми додали: RewriteBase /pub/staticвсе почне працювати.

Як це працювало:

за цією адресою:

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

перезапис повинен працювати:

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

як рядок починався з кореневої папки:

/pub/static/version...

він не працював і не міг перенаправити файл, потрібний.

Перепишіть без основи:

перепишіть не працюйте

Переписати з базою:

переписати твори

Ось частина мого .htaccessфайлу з pub/static(переписується):

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

Як відключити версію статичних файлів:

Якщо ви не хочете використовувати версії статичних файлів, ви можете відключити цю функцію в області адміністратора Magento:

конфігурація

Можна змінити цей параметр для області за замовчуванням за допомогою наступного запиту MySQL :

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

Потім виконайте наступну команду, щоб очистити кеш конфігурації:

bin/magento cache:clean config

PS: Моя відповідь актуальна для користувачів apache2. Якщо ви використовуєте NGINX, дивіться цю відповідь (автор: @ kevin-javitz)


якщо dev/static/signіснує, то вставити його. INSERT INTO core_config_data (scope, scope_id, path, value) VALUES ('default', 0, 'dev/static/sign', '0')
Дахук Мітеш

У системах apache2 вам потрібно включити mod_rewrite за допомогою: - sudo a2enmod rewrite.
Даллас Кларк

8

Якщо ви працюєте з Nginx, ось виправлення. У вас, мабуть, є власний файл конф

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

Додаткова примітка, якщо ви використовуєте apache, переконайтеся, що ви маєте це у своєму пабі / static / .htaccess рядок 16:RewriteRule ^version.+?/(.+)$ $1 [L]
Кевін Чавес

Дякую за вашу відповідь, це вказало на правильне вирішення питання. Я використовую Apache, і рішення інше, але я все одно вдячний вам.
Сіархей Учукхлебау

Ви безпечніше для життя! Я стукав му головою об стіну! Можна підтвердити, що він працює для мого nginx Magento 2.1.3
Cudos

6

Перейдіть до бази даних та вставте рядок у таблицю core_config_data:

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

Дивовижно !! Дякую.
l00k

4

У version*папці не повинно бути staticпапки.
Це, швидше за все, відбувається тому, що у вас не включений mod_rewrite у вашому екземплярі.
Шлях pub/static/version1234/some/asset.jsслід переписати pub/static/some/asset.js. Річ версії існує лише для закінчення терміну кешу браузера.


Я перевіряю, mod_rewrite і це ввімкнено: [root@web www]# httpd -M | grep "rewrite" rewrite_module (shared) Syntax OKу .htaacess він також увімкнено
Сіархей Учукхлебау

переконайтеся, що FollowSymLinksце дозволено. Це сталося зі мною після встановлення останньої версії від github, і у мене виникли проблеми з mod_rewrite та FollowSymLinks.
Маріус

У розділі переписання FollowSymLinksвстановлено так, Options +FollowSymLinksі жодної проблеми з тією ж конфігурацією перед оновленням не було :(
Siarhey Uchukhlebau

4

Схоже, випуск 2.1.3 передбачає, що для типового значення Stores => Configuration => Developer => Static Files Settings => Sign Static Filesвстановлено значення Так.

Тож замість того, щоб змінювати переписування, цю функцію можна встановити на Ні.

Якщо це неможливо зробити у адміністратора, оскільки адміністратор не може завантажити активи інтерфейсу, змініть / додайте цей параметр у core_config_dataтаблицю:

область застосування: за замовчуванням
Oblast_id: 0
шлях: dev / static /
значення знаку : 0

Це питання також відмічено в Github: https://github.com/magento/magento2/isissue/7869


2

Якщо ви використовуєте апаш. Ви не повинні видаляти .htaccess з pub / static. Ви можете отримати заміну тут.


Дякую. Я вже замінив цей файл, але проблема була невірною RewriteBase.
Сіархей Учукхлебау
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.