Jak mogę debugować mój sklep Magento
To pytanie nie jest dla nas zbyt istotne, ale gdyby strona Magento SE istniała 5 lat temu, prawdopodobnie byłaby to nasze pierwsze pytanie. Dla tych, którzy dopiero zaczynają przygodę z Magento lub go nie znają - znajomość podstaw debugowania może być kluczem do wykluczenia przyczyny problemów. I pomimo tego, że teraz jest dla nas nieistotny, przeczymy temu pytaniu, które pojawia się samo z siebie.
Pomóż mojej stronie nie działa!
- Czy mój projekt jest winny?
- Czy wystąpił błąd modułu zewnętrznego?
- Dlaczego nie widzę błędu?
Na każde z tych pytań można łatwo odpowiedzieć, stosując standardowe podejście do debugowania, które może wykonać nawet najbardziej podstawowy użytkownik. Za pomocą procesu eliminacji podstaw debugowania sklepu Magento.
extensions
core
debug
theme
Ben Lessani - Sonassi
źródło
źródło
Odpowiedzi:
Debugowanie to trochę sztuka, ale coś, co można łatwo opanować, wykonując prosty schemat.
Śledź każdy punkt, aż w końcu dojdziesz do rozwiązania.
Włącz błędy PHP
To jest klucz do większości problemów. Ze względów bezpieczeństwa lub z innych powodów wyświetlanie błędów PHP może być domyślnie wyłączone przez konfigurację PHP.
Możesz włączyć błędy za pomocą bardziej trwałego rozwiązania lub po prostu czegoś bardziej tymczasowego.
Stałe rozwiązanie
Dla użytkowników Apache / mod_php
W
.htaccess
pliku głównym dokumentu - po prostu upuść go na górze.Dla użytkowników Nginx / FastCGI
W konfiguracji wirtualnego hosta Nginx, albo w ostatecznej
location .php {
dyrektywie, albo wfastcgi_params
pliku (jeśli masz określony)Rozwiązanie tymczasowe / uniwersalne
Na każdą platformę
Edytuj pasek startowy Magento
index.php
w katalogu głównym dokumentu i odkomentuj następujący wiersz:Włącz tryb programisty
Gdy wystąpił błąd i nagle trafiłeś na stronę „Raport o błędzie” i otrzymałeś pozornie bezużyteczny ciąg błędów, na przykład
1184257287824
- masz kilka opcji.Stałe rozwiązanie
Dla użytkowników Apache / mod_php
W głównym
.htaccess
pliku dokumentu - po prostu upuść go u góry.Dla użytkowników Nginx / fastcgi
W konfiguracji wirtualnego hosta Nginx, albo w ostatecznej
location .php {
dyrektywie, albo wfastcgi_params
pliku (jeśli masz określony)Rozwiązanie tymczasowe / uniwersalne
Zmodyfikuj bootstrap Magento
index.php
w katalogu głównym dokumentu i spraw, abyif
instrukcja zawsze była prawdziwa lub włączona dla określonego adresu IP.lub
Sprawdź swoje uprawnienia
Niepoprawne uprawnienia spowodują wiele problemów, z których wiele nie jest tak łatwo znaleźć na pierwszy rzut oka.
W przeciwnym razie witryna może wyglądać normalnie - bez widocznych błędów krytycznych.
Należy pamiętać, że ta praktyka jest bezpieczna dla hostingu dedykowanego, ale może stwarzać problemy z bezpieczeństwem hostingu współdzielonego, jeśli proces Apache nie jest chroot'owany na użytkownika.
W naszym przykładzie użytkownik SSH / FTP to
sonassi
użytkownik Apache,apache
a grupa toapache
Dodaj użytkownika FTP / SSH do grupy Apache
Co najważniejsze, musimy upewnić się, że użytkownik FTP / SSH jest częścią grupy Apache, w naszym przykładzie jest to
apache
(ale często teżwww-data
)Dodawaj do grupy tylu użytkowników, ile masz w przypadku FTP / SSH.
Zresetuj oryginalne uprawnienia
Zanim zaczniemy, upewnijmy się, że wszystkie uprawnienia są prawidłowe.
Wprowadzanie zmian na stałe
Listy ACL i bity lepkie
Listy ACL w systemie Linux pozwalają nam zdefiniować określone reguły, w naszym przypadku, jakie pliki uprawnień powinny dziedziczyć po utworzeniu. Lepki bit (wspomniana później) dba o grupie dziedziczenia, ale nie pomaga z uprawnieniami, który jest dlaczego używamy ACL.
Zacznij od włączenia obsługi ACL na aktywnej partycji, upewnij się, że twoje jądro zostało skompilowane z obsługą ACL .
Partycja może być
/
,/home
,/var
lub coś innego, wymienić w razie potrzeby.Teraz listy ACL są włączone, możemy ustawić reguły ACL i grupować bity lepkie:
Ale nie mam obsługi ACL
Jeśli twoje jądro nie obsługuje list ACL, możesz również użyć
umask
(które jest ustawieniem czasu działania BASH, FTP i PHP), aby ustawić domyślne uprawnienia do plików. Magento zwykle ustawiaumask(0)
sięindex.php
jednak, że byłoby w swoich zainteresowaniach, aby to zmienić.W twojej
index.php
zmianieumask
powinna być liniaW środowisku BASH dla SSH ustaw to w swoim
.bashrc
lub.bash_profile
W przypadku serwera FTP musisz przeczytać jego dokumentację, ale zasada jest taka sama.
Przywróć motyw do domyślnych
Możliwe, że za ten problem odpowiada Twój motyw lub pakiet. Powrót do waniliowego motywu Magento to szybki sposób na sprawdzenie.
** Jest to związane z zastrzeżeniem, że niektóre moduły mogą być zależne od niektórych funkcji motywu *
Zamiast zmieniać cokolwiek za pomocą panelu administracyjnego, o wiele łatwiej jest po prostu zmienić nazwę katalogów naruszających prawo.
Przez SSH
Lub za pośrednictwem klienta FTP przejdź do nazwy pakietu i zmień jego nazwę na inną. na przykład.
myBrokenTheme.tmp
Jeśli to rozwiąże problem
Następnie musisz głębiej dowiedzieć się, która część szablonu jest problematyczna. Przywróć pakiet i spróbuj wykonać następujące czynności, testując między nimi.
Zasadniczo proces polega na stopniowym włączaniu katalogów podczas przechodzenia w dół drzewa plików - dopóki nie znajdziesz pliku, który Cię narusza.
.tmp
.tmp
Następnie, jeśli albo poprawka, zmień nazwę wszystkich plików w katalogu układu na
.tmp
- (dla użytkowników SSHls | xargs -I {} mv {} {}.tmp
lubrename 's/^/.tmp/' *
)Następnie stopniowo włączaj każdy plik 1 na 1, aż zostanie rozwiązany.
Jeśli to nie rozwiąże problemu
Istnieje możliwość, że twój
base/default
lubenterprise/default
katalogi zostały zanieczyszczone - najlepiej je zastąpić znaną czystą wersją.Możesz to zrobić, pobierając czystą wersję Magento i wymieniając katalogi w razie potrzeby. Za pośrednictwem SSH możesz to zrobić:
Możesz również skorzystać z okazji do
diff
dwóch katalogów, jeśli chcesz zweryfikować zmiany.NB. Ta metoda spowoduje więcej błędów podczas procesu, ponieważ zależność modułu dyktuje istnienie określonych plików. Niestety jest równy kursowi.
Wyłącz moduły lokalne
Domyślnie Magento definiuje ścieżkę dołączania PHP do ładowania klas w następującej kolejności
Ponownie, zamiast wyłączać moduły za pomocą panelu administracyjnego Magento, bardziej praktyczne jest robienie tego na poziomie plików.
Zazwyczaj, aby wyłączyć moduł w „prawidłowy” sposób, należy edytować odpowiedni
./app/etc/modules/MyModule.xml
plik i ustawić<active>false</active>
- jednak tak naprawdę nie uniemożliwia to załadowania klasy.Jeśli inna klasa rozszerzy daną klasę w module (ignorując jakiekolwiek deklaracje zależności Magento), nadal będzie ładowana - niezależnie od tego, czy rozszerzenie jest wyłączone, czy nie.
Zatem ponownie najlepszym sposobem na wyłączenie rozszerzenia jest zmiana nazwy katalogu.
Zacznij od wyłączenia lokalnego
Po prostu zmień nazwę katalogu przez FTP lub użyj następującego polecenia SSH
Następnie wyłącz społeczność
Jeśli problem zostanie rozwiązany z jednego lub drugiego
Jest to przypadek zrozumienia, z którego modułu wynikał w szczególności błąd. Podobnie jak w przykładzie podanym powyżej dla diagnozy pakietu, obowiązuje ten sam proces.
Więc przywróć katalog X i spróbuj wykonać następujące czynności, testując między nimi.
Zasadniczo proces polega na stopniowym włączaniu katalogów (modułów) jeden po drugim, aż błąd pojawi się ponownie
.tmp
(dla użytkowników SSHls | xargs -I {} mv {} {}.tmp
lubrename 's/^/.tmp/' *
).tmp
z nazwy plikuJeśli problem nie zostanie rozwiązany
Wtedy możliwe jest zanieczyszczenie samego rdzenia. Główny rdzeń Magento PHP składa się z
Więc ponownie zmień nazwy tych katalogów i skopiuj w czystym wariancie. Zakładając, że już pobrałeś czystą wersję Magento jak wyżej, za pośrednictwem SSH, możesz to zrobić:
Następnie, jeśli problem nadal nie został rozwiązany, wymień również
lib
katalogW tym momencie twój sklep Magento będzie niczym więcej jak waniliową instalacją ze zmodyfikowaną bazą danych.
Niektóre modele są nadal przechowywane w bazie danych (np. Przyrost zamówienia) - dlatego w tym momencie staje się konieczne ręczne wprowadzanie tych zmian. Do tej pory wszystkie powyższe kroki były odwracalne bez trwałych obrażeń. Ale jeśli zaimportujemy również czystą bazę danych Magento - może okazać się nieodwracalna (bez przywracania kopii zapasowej).
Powyższy przewodnik pomoże Ci zidentyfikować błąd; nie naprawić wynikowego błędu.
Treści chętnie pozyskiwane z www.sonassi.com/knowledge-base/magento-debug-process i www.sonassi.com/knowledge-base/stop-magento-permissions-errors-permanently
źródło
755
i644
uprawnienia? Czy masz jakiś szczególny powód, aby polecić775
i664
?rwx
tylko dla właściciela - ponieważ grupa i wszyscy inni nie są istotni. Ale jak już wspomniałem - nie wszyscy właściwie konfigurują swój serwer (w rzeczywistości bardzo niewielu to robi) - i istnieje możliwość, że użytkownik Apache / Nginx / PHP może różnić się od użytkownika SSH / FTP - więc dodając się nawzajem do każda odpowiednia grupa zezwala następnie narwx
pliki tak, jak powinny.Zgodnie z prośbą na Twitterze i omówieniem na Meta zacznę tutaj samouczek debugowania dla nie-programistów.
Najpierw myślę, że (nawet ty Magento próbuje to zaangażować) Magento jest zbyt skomplikowany dla handlowca bez zespołu programistów / programistów. Ale jeśli jesteś odważny i chcesz spróbować, dajemy z siebie wszystko, aby Ci pomóc. Myślę, że w przypadku niektórych pytań granica między „jak to zrobić?” i „proszę, zrób moją pracę, jestem zbyt głupi, żeby google to” to dość dobra linia. Rozumiem, że często trudno jest myśleć w Google, ponieważ nie wiesz, po co googlujesz, ponieważ nie znasz jeszcze nazwy. To powiedziawszy, zbierzmy rzeczy, które każdy może zrobić w sklepie Magento, nawet jeśli nie jesteś programistą.
Bardzo dobra odpowiedź na pytanie, jak debugować magento, kiedy chcesz się zabrudzić, została już udzielona przez Sonassi , ale staram się dodawać rzeczy i kopiować to, co moim zdaniem dotyczy kupców.
Tryb rozwoju
Chcesz mieć prawdziwe błędy, a nie tę głupią stronę „wystąpił błąd”, którą Magento dostarcza normalnie.
Dzięki fontis.com za ten obraz.
Raporty wymienione na stronie można znaleźć w
var/reports/<the_number>
Kiedy aktywujesz tryb programowania, magento zgłasza prawdziwy błąd, błędy te mogą szczególnie przeciekać poświadczenia, takie jak te dla bazy danych! Zastanów się, zanim włączysz to na serwerach produkcyjnych!
Otwórz
index.php
plik w folderze głównym magento, w zależności od wersji znajdziesz te linie wokół linii 73:Aby teraz włączyć tryb, musisz zmienić te linie.
Jeśli znasz swój adres IP (większość ludzi otrzymuje nowy co 24 godziny, przynajmniej w Niemczech), Google pomaga tutaj:
Jeśli nie znasz swojego adresu IP z jakiegokolwiek powodu, możesz wyświetlić błędy dla wszystkich.
Wycięcie lasu
Magento rejestruje wiele rzeczy w dwóch plikach:
var/log/exception.log
var/log/system.log
Wyjątki są zawsze rejestrowane. Dziennik systemu musi być włączony w wewnętrznej bazie danych:
Ustaw
Enabled
się tak i zobaczysz więcej błędów i komunikaty debugowania wsystem.log
iwexception.log
Czy to problem z motywem?
Masz swój własny motyw, konfiguruje się go tutaj:
System> Konfiguracja> Projekt
Dzięki kb.magenting.com za zdjęcie
Tutaj możesz skonfigurować pakiet i motyw. Jeśli chcesz spróbować odtworzyć błąd w domyślnym motywie, usuń wszystko z pól wejściowych. Następnie kliknij przycisk Zapisz, a zobaczysz standardowy motyw Magento, jak w sklepie demonstracyjnym. Jeśli masz sklep przed wersją 1.8, możesz znaleźć zrzut ekranu w Podręczniku użytkownika Magento Community Edition
Jeśli nie można odtworzyć problemu w domyślnym motywie, motyw jest uszkodzony, skontaktuj się ze sprzedawcą motywu. Nie zapewniamy wsparcia dla motywów stron trzecich, zwłaszcza komercyjnych.
Co teraz?
Znalazłeś prawdziwy błąd, który można odtworzyć, jest powtarzalny w domyślnym motywie? Świetnie, otwórz pytanie, a my staramy się pomóc.
W pytaniu:
źródło
Aby wykonać powyższe kroki, zdecydowanie powinieneś otrzymać błędy.
źródło
Debuguj ślad śledzenia
Jest to dobra funkcja do debugowania wywołania funkcji w magento.
Dodaj tę funkcję do pliku / config.php lub utwórz nowy plik i umieść wszystkie najczęściej używane funkcje php.
OutPut będzie
źródło