Как я могу отладить мой магазин Magento
Это вопрос, который не слишком важен для нас сейчас, но если бы сайт Magento SE существовал 5 лет назад, это, вероятно, был бы наш первый вопрос. Для тех, кто только попадает в Magento или не знаком с ним - знание основ отладки может быть ключом к исключению причины проблем. И, несмотря на то, что сейчас он не имеет никакого отношения к нам, мы опережаем этот вопрос с помощью подхода с самоотвечением.
Помогите, мой сайт не работает!
- Мой дизайн виноват?
- Неисправен ли сторонний модуль?
- Почему я не вижу ошибку?
На каждый из этих вопросов можно легко ответить, следуя стандартизированному подходу к отладке, который могут выполнить даже самые простые пользователи. Посредством процесса устранения основ отладки магазина Magento.
extensions
core
debug
theme
Бен Лессани - Сонасси
источник
источник
Ответы:
Отладка - это что-то вроде искусства, но с этим можно легко справиться, следуя простому режиму.
Следуйте каждому пункту, пока, наконец, не найдете решение.
Включить ошибки PHP
Это ключ к большинству вопросов. В целях безопасности или по другим причинам отображение ошибок PHP может быть отключено по умолчанию в вашей конфигурации PHP.
Вы можете включить ошибки с более постоянным решением или просто что-то более временное.
Постоянное решение
Для пользователей Apache / mod_php
В
.htaccess
файле корня вашего документа - просто поместите это вверху.Для пользователей Nginx / FastCGI
В вашей конфигурации виртуального хоста Nginx, либо в конечной
location .php {
директиве, либо вfastcgi_params
файле (если он указан)Временное / Универсальное решение
Для любой платформы
Отредактируйте загрузчик Magento
index.php
в корневом каталоге вашего документа и раскомментируйте следующую строку:Включить режим разработчика
Когда у вас возникла ошибка, и вы внезапно нажали на страницу «Отчет об ошибке», и вам была дана, казалось бы, бесполезная строка с ошибкой вроде
1184257287824
- у вас есть несколько вариантов.Постоянное решение
Для пользователей Apache / mod_php
В корневой
.htaccess
файл вашего документа - просто поместите это вверху.Для пользователей Nginx / fastcgi
В вашей конфигурации виртуального хоста Nginx, либо в конечной
location .php {
директиве, либо вfastcgi_params
файле (если он указан)Временное / Универсальное решение
Отредактируйте загрузочную версию Magento
index.php
в корневом каталоге вашего документа и либо сделайтеif
утверждение всегда верным, либо включите его для вашего конкретного IP-адреса.или же
Проверьте ваши разрешения
Неправильные разрешения вызовут массу проблем, многие из которых не так легко найти на первый взгляд.
В противном случае сайт может функционировать как обычно - без видимых критических ошибок.
Пожалуйста, имейте в виду, что эта практика безопасна для выделенного хостинга, но может представлять проблемы безопасности с общим хостингом, если процесс Apache не привязан к каждому пользователю.
В нашем примере пользователь SSH / FTP -
sonassi
это пользователь Apache,apache
а группа -apache
Добавьте пользователя FTP / SSH в группу Apache
Самое главное, мы должны убедиться, что пользователь FTP / SSH входит в группу Apache, в нашем примере это ее
apache
(но также обычноwww-data
)Добавляйте в группу столько пользователей, сколько у вас есть для FTP / SSH.
Сбросить исходные разрешения
Итак, прежде чем мы начнем, давайте удостоверимся, что все разрешения правильны.
Делать изменения постоянными
ACL и Sticky Bits
ACL в Linux позволяют нам определять конкретные правила, в нашем случае, какие файлы разрешений должны наследоваться при создании. Липкий бит (упомянутый выше) заботится о группе наследования, но не помогает с правами, и именно поэтому мы используем ACL.
Начните с включения поддержки ACL на активном разделе, убедитесь, что ваше ядро скомпилировано с поддержкой ACL .
Ваш раздел может быть
/
,/home
,/var
или что - то другое, заменить в случае необходимости.Теперь ACL включены, мы можем установить правила ACL и группировать липкие биты:
Но у меня нет поддержки ACL
Если ваше Ядро не поддерживает ACL, вы также можете использовать
umask
(это настройка времени выполнения для BASH, FTP и PHP), чтобы установить разрешения для файлов по умолчанию. Magento обычно устанавливаетumask(0)
вindex.php
, однако, это было бы в ваших интересах , чтобы изменить это.В вашем
index.php
измененииumask
строка должна бытьИ в вашей среде BASH для SSH, установите это либо в вашем
.bashrc
или.bash_profile
Для вашего FTP-сервера вам необходимо прочитать документацию к нему, но принцип тот же.
Восстановить тему по умолчанию
Вполне возможно, что ваша тема или пакет отвечает за эту проблему. Возвращаясь к ванильной теме Magento - это быстрый способ выяснить это.
** Это связано с оговоркой, что некоторые модули могут зависеть от определенных функций темы *
Вместо того, чтобы что-либо менять через панель администратора, гораздо проще просто переименовать нарушающие каталоги.
Через SSH
Или через ваш FTP-клиент, пройдите и переименуйте ваш пакет во что-то другое. например.
myBrokenTheme.tmp
Если это решит вашу проблему
Затем вам нужно немного покопаться в том, какая часть шаблона проблематична. Так что восстановите ваш пакет и попробуйте следующее, тестируя между ними.
По сути, процесс состоит в том, чтобы постепенно включать каталоги при прохождении по дереву файлов - пока вы не найдете файл, нарушающий работу.
.tmp
.tmp
Затем, если любой из них приведет к исправлению, переименуйте все файлы в каталоге макета в
.tmp
- (для пользователей SSHls | xargs -I {} mv {} {}.tmp
илиrename 's/^/.tmp/' *
)Затем постепенно включите каждый файл 1 на 1 до разрешения.
Если это не решит вашу проблему
Существует вероятность того, что ваши каталоги
base/default
илиenterprise/default
каталоги были заражены - и их лучше заменить известной чистой версией.Вы можете сделать это, загрузив чистую сборку Magento и при необходимости заменив каталоги. Через SSH вы можете сделать это:
Вы также можете воспользоваться возможностью для
diff
двух каталогов, если вы хотите проверить какие-либо изменения.NB. Этот метод вызовет больше ошибок во время процесса, так как зависимость от модуля диктует существование определенных файлов. К сожалению, его номинал для курса.
Отключить локальные модули
По умолчанию Magento определяет путь включения PHP для загрузки классов в следующем порядке
Опять же, вместо того, чтобы отключать модули через админ-панель Magento, это более практично делать на уровне файлов.
Как правило, чтобы отключить модуль «правильным» способом, вы должны отредактировать соответствующий
./app/etc/modules/MyModule.xml
файл и установить его<active>false</active>
- однако это не мешает загрузке класса.Если другой класс расширяет данный класс в модуле (игнорируя любые объявления зависимостей Magento), он все равно будет загружен - независимо от того, отключено ли расширение или нет.
Итак, еще раз, лучший способ отключить расширение - переименовать каталог.
Начните с отключения локальной
Просто переименуйте каталог через FTP или используйте следующую команду SSH
Затем отключите сообщество
Если проблема решена из
Тогда это пример понимания того, из какого модуля произошла ошибка. Как и в примере, приведенном выше для диагностики упаковки, применяется тот же процесс.
Поэтому восстановите каталог X и попробуйте выполнить следующее, тестируя между ними.
По сути, процесс состоит в том, чтобы постепенно включать каталоги (модули) по одному, пока ошибка не возникнет снова.
.tmp
(для пользователей SSHls | xargs -I {} mv {} {}.tmp
илиrename 's/^/.tmp/' *
).tmp
из имени файлаЕсли проблема не решена
Тогда возможно, что само ядро загрязнено. Основное ядро Magento PHP состоит из
Итак, еще раз, переименуйте эти каталоги и скопируйте в чистом варианте. Предполагая, что вы уже загрузили чистую версию Magento, как указано выше, через SSH, вы можете сделать это:
Тогда, если проблема все еще не решена, замените
lib
каталог тожеНа этом этапе ваш магазин Magento будет не более чем простой установкой с измененной базой данных.
Некоторые модели на самом деле все еще хранятся в базе данных (например, приращение порядка) - поэтому на данном этапе это становится случаем ручного внесения этих изменений. До сих пор все вышеперечисленные шаги были обратимыми без какого-либо длительного ущерба. Но если бы мы импортировали чистую базу данных Magento - это могло бы стать необратимым (если не считать восстановления резервной копии).
Приведенное выше руководство поможет вам обнаружить ошибку; не исправить полученную ошибку.
Контент охотно получен от www.sonassi.com/knowledge-base/magento-debug-process и www.sonassi.com/knowledge-base/stop-magento-permissions-errors-permanently
источник
755
и644
разрешения? Или у вас есть особые причины, чтобы рекомендовать775
и664
?rwx
только для владельца - как группа, так и все остальные не имеют отношения. Но, как я уже говорил, не все настраивают свой сервер должным образом (на самом деле, очень, очень немногие это делают), и у пользователя Apache / Nginx / PHP есть вероятность отличаться от такового у пользователя SSH / FTP - поэтому добавляем друг друга в каждая соответствующая группа затем разрешает для каждогоrwx
файла, как они должны быть в состоянии.В соответствии с просьбой в Twitter и обсуждением в Meta, я начну здесь учебник по отладке для не-разработчиков.
Во-первых, я думаю (даже если вы magento пытаетесь этим заниматься), Magento слишком сложен для продавца без команды разработчиков / разработчиков. Но если вы смелы и хотите попробовать, мы сделаем все возможное, чтобы помочь вам. Я думаю, что для некоторых вопросов есть граница между "как я могу это сделать?" и "пожалуйста, сделайте мою работу, я слишком глуп, чтобы гуглить это" - довольно тонкая грань. Я понимаю, что Google часто думает, что это трудно, потому что вы не знаете, для чего вы ищете, потому что вы еще не знаете названия. При этом давайте собирать то, что может сделать каждый, кто работает в магазине magento, даже если вы не являетесь разработчиками.
Очень хороший ответ о том, как отлаживать magento, когда вы хотите испачкаться, уже дал Sonassi , но я стараюсь добавлять вещи и копировать то, что, по моему мнению, применимо для торговцев.
Режим разработки
Вы хотите иметь настоящие ошибки, а не ту дрянную страницу "произошла ошибка", которую magento выдает нормально.
Спасибо fontis.com за это изображение.
Отчеты, упомянутые на странице, можно найти в
var/reports/<the_number>
Когда вы активируете режим разработки, magento вызывает реальную ошибку, эти ошибки могут особенно утекать учетные данные, например, для базы данных! Итак, подумайте, прежде чем включать его на производственных серверах!
Откройте ваш
index.php
файл в корневой папке magento, в зависимости от версии вы найдете следующие строки в строке 73:Чтобы активировать сейчас режим, нужно поменять эти строки.
Если вы знаете свой IP-адрес (большинство людей получают новый каждые 24 часа, по крайней мере, в Германии), Google поможет вам здесь:
Если по каким-либо причинам вы не знаете свой ip, вы можете показать ошибки для всех.
логирование
Magento записывает много вещей в два файла:
var/log/exception.log
var/log/system.log
Исключения регистрируются всегда. Системный журнал должен быть включен в бэкэнде:
Установите
Enabled
Да, и вы увидите больше ошибок и сообщений отладки вsystem.log
и вexception.log
Это проблема темы?
У вас есть собственная тема, это настраивается в бэкэнде здесь:
Система> Конфигурация> Дизайн
Спасибо kb.magenting.com за изображение
Здесь вы можете настроить пакет и тему. Если вы хотите попытаться воспроизвести ошибку в теме по умолчанию, удалите все из полей ввода. Затем нажмите «Сохранить», и вы увидите стандартную тему magento, как в демонстрационном магазине. Если у вас есть магазин до 1.8, вы можете найти снимок экрана в Руководстве пользователя Magento Community Edition.
Если вы не можете воспроизвести проблему в теме по умолчанию, ваша тема повреждена, обратитесь к поставщику темы. Мы не поддерживаем сторонние темы, особенно коммерческие.
Что теперь?
Вы нашли реальную ошибку, которую можно воспроизвести, она воспроизводима в теме по умолчанию? Отлично, пожалуйста, откройте вопрос, и мы делаем все возможное, чтобы помочь.
В вопросе:
источник
Для использования вышеуказанных шагов вы должны получить ошибки определенно.
источник
Отладка Backtrace
Это хорошая функция для отладки вызова функции в magento.
Добавьте эту функцию в include / config.php или создайте новый файл и поместите все свои распространенные функции php.
OutPut будет
источник