X

Magento 2: Не отображаются картинки, проблемы с static контентом

В случае, когда вы работаете с различными версиями кодовой базы и базы данных, бывают случае когда на фронтенде перестают отображаться изображения, скрипты или стили - статический контент. Сегодня я расскажу об одном из способов исправления этой беды..

Начнем с того, что откроем консоль разработчика в браузере (F12), перейдем на вкладку Network, перезагрузим страницу и посмотрим на url ресурсов которые не открываются.

Версионирование

Если url указывает на что-то вроде: /static/version123123123/frontend/.../image.jpg , то нужно сравнить это с тем, что у вас находится в папке /pub/static/.. очень часто бывает, что файлы лежат внутри нее, но не в /static/version123123123/frontend/, а в /static/frontend/ - это указывает на то, что в базе данных у вас установлен флаг для версионирования статического контента. Версионирование используется для того, чтобы при обновлении статического контента, использовалась новая версия, а не закешированная.

Для того, чтобы избавиться от version123123123, есть два пути, первый, подходит для случаев, когда админка не работает должным образом. В таком случае, идем в базу данных и в таблице core_config_data находим запись с значением dev/static/sign в столбце path, для этого можно использовать запрос

SELECT * FROM `core_config_data` WHERE `path` LIKE '%dev/static/sign%'

Если в столбце value установлено значение 1, то его нужно поменять на 0. Сделать это можно вот таким запросом:

UPDATE `core_config_data` SET `value`="0" WHERE `path` LIKE '%dev/static/sign%'

Если же записи нет, то ее можно добавить такой командой

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

Второй вариант, подойдет если с админкой все ок, нужно сходить вот сюда

Magento Admin -> Stores -> Configuration -> Advanced -> Developer

и изменить значение "Sign Static Files" с Yes на No

Редирект с http на https

Еще одной частой проблемой бывает, что после того как база скопирована с прода, на локальное окружение, были заменены url-ки в core_config_data, на что-то по типу http://site.local, но картинки все равно пытаются грузится с https://site.local. В таком случае, нужно проверить в core_config_data такие параметры и если они равны "1", то установить их в "0":

  • web/secure/use_in_frontend
  • web/secure/use_in_adminhtml
  • web/url/redirect_to_base

Для этого можно выполнить такой SQL

UPDATE core_config_data
SET value=0
WHERE 
path='web/secure/use_in_frontend' 
OR path='web/secure/use_in_adminhtml' 
OR path='web/url/redirect_to_base';

После этого, необходимо сбросить кеш

php bin/magento cache:clean

Отсутствие статического контента

Другой частой проблемой, бывает отсутствие каких-либо файлов в папке /pub/static/ или их устаревшая версия. Для того, чтобы перегенерировать файлы в этой папке, нужно выполнить следующую команду:

php bin/magento setup:static-content:deploy

В случае, если вам покажется ошибка, о том, что вы используете режим разработчика, то необходимо добавить параметр -f вот так

php bin/magento setup:static-content:deploy -f

Теперь поговорим про очистку этой папки, удалить все файлы из нее можно командой

rm -R pub/static/*
rm -R var/view_preprocessed/*

выполненяются команды из корневой директории magent-ы.

Важной особенностью является то, что эта команда не затрагивает скрытые файлы, такие как например .htaccess

Тоже самое можно сделать используя админку, если она работоспособна

System -> Tools -> Cache Management -> [Flush Static Files Cache]

Вывод

В данной статье я рассмотрел одну из самых распространенных проблем связанных с отсутствием статического контента: это отсутствие его как такового, в таком случае, его необходимо сгенерировать, а так же случае когда в настройках базы указанно использовать версионирование, а в кодовой базе оно не используется.

Категории: Magento