Magento 2 reindex zwraca Brak takiej encji


14

Pomyślnie przeprowadziłem migrację katalogu z Magento 1.9.2.3 do Magento 2.0.2. Po migracji zrobiłem ponowne indeksowanie za pomocą polecenia php bin/magento indexer:reindex.

Wszystko zostało pomyślnie zindeksowane, z wyjątkiem indeksów catalog_category_producti catalog_product_categorypowracających No such entity.w powłoce i powiadomień Reindex Requiredw adminie. Sprawdziłem, var/log/ale nie ma błędów.

W rezultacie produkty są dodawane do kategorii w backendzie, ale kategorie są puste na frontonie.

Co może powodować ten problem? Jak mogę debugować?


Odpowiedzi:


7

Oprócz Raphaela:

Debugowałem ten kod, zmieniając konstruktor wyjątków do celów debugowania (przez xdebug lub stare zrzuty). Zmień konstrukcję wyjątku na razie (plik jest \lib\internal\Magento\Framework\Exception\NoSuchEntityException.php)

$trace = debug_backtrace();
var_dump($trace[1]['class'] . '::' . $trace[1]['function'] . '('.$trace[1]['line'] .')';
die();

Następnie przejdź o jeden stos i sprawdź podane argumenty (argumenty są również dostępne w śladzie debugowania, ale zrzutowanie obiektów magento nie jest tak naprawdę przyjazne dla przeglądarki).

Doszedł do wniosku, że to storeGroupRepositorytam, gdzie nie mógł znaleźć identyfikatora grupy. Zanurkowałem w tabelach sklepów i zobaczyłem kilka wierszy w tabeli sklepów, które odwoływały się do tych, store_groupktórych nie było w store_grouptabeli (grupa sklepów nie istnieje w odpowiedniej tabeli).

Usunięto wadliwe linie sklepu i od tego czasu błąd zniknął.

Pamiętaj jednak, że może to być także inna tabela / inny powód. na przykład witryna, sklep lub grupa sklepów w tym przypadku. To zawsze jest małe wyszukiwanie, które musisz wykonać sam.

Odkryłem również, że istnieje wiele odniesień do tych sklepów, a także usunąłem je ręcznie w db. Może to być żmudna praca, ale rozwiąże problem.

I nie zapomnij usunąć swoich hacków.


dlaczego zamiast tego nie użyjesz xdebug?
Łukasz

@TimVroom Mam również ten sam błąd. Proszę o pomoc magento.stackexchange.com/q/236187/24878
akgola

11

Nie jestem pewien, czy jest już za późno na dodanie, ale kiedy to miałem, wydawało się, że jest to spowodowane niektórymi identyfikatorami jednostek, które musiały być ustawione na 0.

Ten skrypt działał dla mnie:

SET FOREIGN_KEY_CHECKS=0;
UPDATE `store` SET store_id = 0 WHERE code='admin';
UPDATE `store_group` SET group_id = 0 WHERE name='Default';
UPDATE `store_website` SET website_id = 0 WHERE code='admin';
UPDATE `customer_group` SET customer_group_id = 0 WHERE customer_group_code='NOT LOGGED IN';
SET FOREIGN_KEY_CHECKS=1;

Mam nadzieję, że to pomoże.


to bardzo mi pomogło, dziękuję za udostępnienie!
favo

To również zadziałało dla mnie :)
Owen

3

Ok, więc No such entity.pojawia się komunikat o błędzie \lib\internal\Magento\Framework\Exception\NoSuchEntityException.php.

Ta klasa jest niestandardową klasą wyjątków Magento i jest często używana w Magento 2.

Ilekroć widzisz kod taki jak:

catch (NoSuchEntityException $e)

Lub

throw NoSuchEntityException;

Ta klasa jest używana.

Problem w twoim przypadku polega na tym, że trudno jest ustalić, skąd ten wyjątek jest zgłaszany.

Aby go nieco zawęzić, możesz rozpocząć debugowanie dwóch klas powiązanych z indeksami, które zawiodły:

  • Magento\Catalog\Model\Indexer\Category\Product=> Catalog_category_product wskaźnik
  • Magento\Catalog\Model\Indexer\Product\Category=> indeks katalog_produktu_kategorii

Na szczęście drugi rozszerza pierwszy, więc masz jeden punkt początkowy.

Należy pamiętać, że każda z tych klas indeksujących używa klas wierszy akcji do przetworzenia ponownego indeksowania:

  • Magento\Catalog\Model\Indexer\Product\Category\Action\Rows
  • Magento\Catalog\Model\Indexer\Category\Product\Action\Rows

Dla mnie właśnie tam powinieneś zacząć debugowanie, ponieważ te klasy wierszy akcji są klasami bezpośrednimi, które ponownie indeksują te dwa indeksy.

Naprawdę mam nadzieję, że pomoże ci to znaleźć twój problem.


Cześć @Raphael, Mam podobny problem z tworzeniem klientów po migracji. Proszę, pomóż mi magento.stackexchange.com/q/236187/24878
akgola

0

TO DZIAŁAŁO DLA MNIE PO SPRÓBOWANIU WSZYSTKO.

Zakładając, że witryna jest włączona Developer Mode, możesz ją zmienić na Production Modei wyczyścić / opróżnić pamięć podręczną, a następnie przełączyć z powrotem na Developer Mode.

Miałem ten problem w interfejsie, ponieważ niedawno przeniosłem bazę danych z jednego serwera na inny. W ten sposób udało mi się rozwiązać.

NADZIEJA, KTÓRA POMAGA NIEKTÓREJ.



0

Ten błąd, w moim przypadku, dotyczy konfiguracji wielu sklepów i wielu domen. Magento obcina kody sklepów. Jeśli odwzorowujesz domeny na kody sklepu, upewnij się, że kod sklepu pasuje do routingu określonego w index.php (lub gdziekolwiek mapujesz). W panelu administracyjnym zaznacz kolejno opcje „Sklepy” > „ Wszystkie sklepy ”. Sprawdź swoją stronę internetową, przechowuj i przechowuj Zobacz kody sklepów.

Kiedy zdałem sobie sprawę, że Magento obciął kod sklepu, który wprowadziłem, dokonałem tej samej korekty mapowania i wszystko zaczęło działać ponownie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.