„Witryna napotkała nieoczekiwany błąd. Spróbuj ponownie później."

27

Mam ten błąd w Drupal 7

  1. jak mogę uzyskać więcej informacji o tym błędzie? Jakikolwiek raport, jakikolwiek dziennik? Nic w błędach php.

  2. Jak mogę wyłączyć tę wiadomość i mieć bardziej przydatną do debugowania?

Uwaga : moje pytanie NIE brzmi „jak mogę rozwiązać ten problem”

theredled
źródło

Odpowiedzi:

27

Ten błąd pochodzi z nieprzechwyconego wyjątku PHP . Drupal wyłapuje wyjątki, więc użytkownik nie wyświetla brzydkiego komunikatu o błędzie PHP. Informacje o wyjątku można znaleźć w linku „Ostatnie wiadomości dziennika” w raportach (lub wypróbuj tę ścieżkę: / admin / raporty / dblog). Upewnij się, że moduł „Rejestrowanie bazy danych” jest włączony, ponieważ moduł ten udostępnia ten raport.

Zobaczysz wszystkie wewnętrzne wiadomości, które zostały wygenerowane. Filtruj według typu „PHP” i istotności „błąd”, a prawdopodobnie znajdziesz komunikat o nieprzechwyconym wyjątku. To powoduje twój problem. Teraz masz więcej informacji, więc możesz je naprawić.

sanzante
źródło
Ok, dziękuję, więc czy nie ma gotowego sposobu na zmianę tego zachowania na bardziej zgodne z debugowaniem? (takie jak ... wyświetlenie wyjątku na ekranie)
ored.
Nie, AFAIK nie ma na to łatwego sposobu. Możesz spróbować ustawić własny moduł obsługi wyjątków (używając standardowej funkcji PHP set_exception_handler), ale uważaj na skutki uboczne.
sanzante
7
Świetny pomysł do sprawdzenia /admin/reports/dblog. Chyba że oczywiście nie możesz się zalogować, ponieważ ten głupi błąd zablokował całą witrynę Drupala!
g33kz0r
Sam widziałem ten błąd z odniesieniem widoku „Wyjątek pola: próba utworzenia pola nieznanego ...” Rozwiązanie dla mnie umożliwiające włączenie drush en widoku odniesienia działało - pracuję z innymi ludźmi i ściągam ich aktualizacje git, więc otrzymuję kod modułu, ale ja muszę włączyć moduł (ponieważ enable znajduje się w bazie danych, której nie otrzymuję w żądaniu ściągnięcia, korzystamy z funkcji). Mam nadzieję, że to pomaga innym ludziom.
therobyouknow
4
@ g33kz0r: Możesz użyć drush watchdog-show, aby zobaczyć komunikaty o błędach lub jeśli Twoja witryna jest całkowicie zepsuta, sprawdź tabelę watchdog w bazie danych, w której te wiadomości są przechowywane.
sanzante
15

Drupal 6 i 7

Jeśli używasz Drush, po prostu zrób drush vset error_level 1.

W przeciwnym razie przejdź do „ /admin/config/development/logging” i zmień ustawienie na „Błędy i ostrzeżenia”

Drupal 8

Zamiast drush vset/ vget/ vdelmożesz użyć cset/ cget/ cdeldla wartości konfiguracji i sset/ sget/ sdeldla wartości stanu.

coak
źródło
12

ŁATWY SPOSÓB

Edytuj ustawienia.php i dodaj tam linię (szczególnie na swojej stronie deweloperów, możesz to po prostu zachować)

$conf['error_level'] = 1;

drush wymaga możliwości ładowania bazy danych.

Frank Carey
źródło
NAJLEPSZA odpowiedź. Oszczędzało mi to czas.
Austin
6

ŁATWY SPOSÓB dla Drupala 8 ,

jeśli nie możesz się już zalogować, aby uzyskać dostęp do ostatnich komunikatów w dzienniku, jak opisano w zaakceptowanej odpowiedzi.

Otwórz plik /sites/default/settings.phpza pomocą edytora lub klienta ftp i dodaj ten wiersz:

$config['system.logging']['error_level'] = 'verbose';

Po ponownym załadowaniu strony zobaczysz pełny komunikat o błędzie zamiast ogólnego „Witryna napotkała nieoczekiwany błąd. Spróbuj ponownie później."

4k4
źródło
2

Ten błąd pochodzi _drupal_log_error().

Jako szybką poprawkę dla programistów możesz zaktualizować tę funkcję, aby wyświetlać bardziej szczegółowe komunikaty o błędach, ale upewnij się, że zmienisz ją z powrotem przed uruchomieniem witryny :)

Clive
źródło
0

Sprawdź blog. Jest to najlepsze miejsce do znalezienia błędów na stronie internetowej Drupal. Sprawdź także konsolę JS, aby wykryć dodatkowe błędy w przeglądarce.

Binny
źródło
Dzięki za dblog (/ admin / raporty / dblog). Jak mogę wyłączyć tę wiadomość i uzyskać bardziej przydatną do debugowania?
theredled
1
W każdym razie nie sądzę, że błąd JS może spowodować błąd serwera ...
ored
0

Sprawdź w watchdogtabeli w MySQL. Możesz pobrać obiekt Blob ( variableskolumnę) i otworzyć go za pomocą Notatnika. Pokaże zserializowany obiekt z twoim błędem.

Maxime Fafard
źródło
0

Spróbuj tego:

poziom błędu

admin menu equivalent: admin/config/development/logging
drush command: drush vset -y error_level <value>
values:
    0: none
    1: errors and warnings
    2: all 
ravyg
źródło
0

Aby błędy były widoczne w witrynie Drupal, znajdź plik index.php w głównym katalogu swojej witryny. Otwórz plik index.php i dodaj ten kod bezpośrednio przed pierwszą linią pliku:

error_reporting(E_ALL); 
ini_set('display_errors', TRUE); 
ini_set('display_startup_errors', TRUE); 

Możesz także spróbować rozwiązać problemy Drupal z dziennikami błędów, jak opisano tutaj.

Chetabahana
źródło
0

To jest stary wątek, ale ponieważ ostatnio napotkałem ten sam problem, udostępniając swoje dane. Nie byłem w stanie uzyskać dostępu do żadnej ze ścieżek Drupala, ponieważ zawsze otrzymywałem ten błąd bez względu na wszystko. To zaczęło się dziać po tym, jak zaktualizowałem widok, więc wiedziałem, co trzeba zrobić, ale nie byłem w stanie otworzyć widoku. W ten sposób przejrzałem dzienniki serwera Apache. Oprócz powyższego rozwiązania, takiego jak przeglądanie drushów i blogów, pomocne może być przejrzenie dzienników serwera Apache, szczególnie gdy nie można uzyskać dostępu do żadnej ze ścieżek aplikacji. Zazwyczaj są one obecne w pliku \ logs \ error.log i zawierają szczegółowe informacje na temat nieobsługiwanego wyjątku oraz miejsca jego wygenerowania itp. Jako szybką poprawkę możesz skomentować kod zgłaszający wyjątek i dokonać aktualizacji aplikacji. W moim przypadku skomentowałem post kod, który udało mi się dostać do widoku i dokonać niezbędnych aktualizacji. Mam nadzieję, że pomoże to komuś w podobnych sytuacjach

MAJ
źródło
0

To bardzo interesujące, ale jeśli otworzysz źródło strony (CTRL-U), wtedy wszystkie ostrzeżenia i komunikaty o błędach będą dostępne, są one tylko w ukrytym elemencie. Szukać element-invisible.

Edycja: $conf['error_level'] = 1;należy również umieścić w settings.phppliku.

endo64
źródło