Magento 2 재 색인이 해당 엔티티를 반환하지 않음


14

카탈로그를 Magento 1.9.2.3에서 Magento 2.0.2로 성공적으로 마이그레이션했습니다. 마이그레이션 후 명령을 사용하여 다시 색인을 생성했습니다 php bin/magento indexer:reindex.

모든 인덱스를 제외하고, 성공적으로 인덱싱됩니다 catalog_category_productcatalog_product_category반환, No such entity.쉘 및 알림에 Reindex Required관리자에. 확인 var/log/했지만 오류가 없습니다.

결과적으로 제품은 백엔드의 카테고리에 추가되지만 카테고리는 프론트 엔드에서 비어 있습니다.

이 문제의 원인은 무엇입니까? 어떻게 디버깅 할 수 있습니까?


답변:


7

라파엘 외에 :

디버그 목적으로 (xdebug 또는 오래된 덤프에 의해) 예외 생성자를 변경하여이 코드를 디버깅했습니다. 현재 예외 구성을 변경하십시오 (파일은 \lib\internal\Magento\Framework\Exception\NoSuchEntityException.php).

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

그 후 하나의 스택으로 올라가 주어진 인수를 확인하십시오 (args는 디버그 백 트레이스에서도 사용할 수 있지만 magento 객체 덤프는 브라우저 친화적이지 않습니다).

결론 storeGroupRepository은 그룹 ID를 찾을 수없는 곳에 있다는 것입니다. 매장 테이블로 뛰어와 참조 된 매장 테이블에 몇 줄 보았다 store_group아니었다 그 store_group(상점 그룹이 관련이없는 테이블에 존재) 테이블을.

잘못된 상점 라인을 제거하고 그 이후로 오류가 사라졌습니다.

그러나 다른 테이블 / 다른 이유 일 수도 있습니다. 예를 들어,이 경우 웹 사이트, 상점 자체 또는 상점 그룹이 있습니다. 그래서 그것은 항상 당신이 스스로 수행해야 할 작은 검색입니다.

또한 이러한 상점에 ​​대한 참조가 상당히 많았으며 db에서 수동으로 제거했습니다. 이것은 지루한 작업이지만 문제를 해결할 것입니다.

그리고 해킹을 제거하는 것을 잊지 마십시오.


왜 xdebug를 대신 사용하지 않습니까?
Luke

@TimVroom 나는 또한 같은 오류가 있습니다. 제발 도와주세요 magento.stackexchange.com/q/236187/24878
akgola

11

이것이 추가하기에 너무 늦었는지 확실하지 않지만 이것을 가지고있을 때 0으로 설정 해야하는 일부 엔티티 ID로 인한 것 같습니다.

이 스크립트는 저에게 효과적이었습니다.

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;

도움이 되길 바랍니다.


이것은 많은 도움이되었습니다. 공유해 주셔서 감사합니다!
favo

이것은 또한 나를 위해 일했다 :)
Owen

3

좋아, 그래서 No such entity.오류 메시지에서 온다 \lib\internal\Magento\Framework\Exception\NoSuchEntityException.php.

이 클래스는 Magento의 사용자 정의 예외 클래스이며 Magento 2에서 많이 사용됩니다.

다음과 같은 코드가 나타날 때마다 :

catch (NoSuchEntityException $e)

또는

throw NoSuchEntityException;

이 클래스가 사용되고 있습니다.

귀하의 경우 문제는 예외가 발생하는 곳을 찾기가 어렵다는 것입니다.

따라서 조금 좁히기 위해 실패한 인덱스와 관련된 두 클래스 디버깅을 시작할 수 있습니다.

  • Magento\Catalog\Model\Indexer\Category\Product=> catalog_category_product 색인
  • Magento\Catalog\Model\Indexer\Product\Category=> catalog_product_category 인덱스

다행히 두 번째는 첫 번째 것을 확장하므로 시작점이 하나 있습니다.

이 인덱서 클래스 각각은 액션 행 클래스를 사용하여 재 인덱싱을 처리한다는 점을 명심해야합니다.

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

저에게 액션 행 클래스는 두 인덱스를 다시 인덱싱하는 직접 클래스이므로 디버깅을 시작해야합니다.

문제를 찾는 데 도움이되기를 바랍니다.


안녕하세요 @Raphael, 마이그레이션 후 고객 생성과 비슷한 문제가 있습니다. magento.stackexchange.com/q/236187/24878
akgola

0

이것은 모든 것을 시도한 후에 나를 위해 일했습니다.

사이트가에 있다고 가정하면 사이트 Developer Mode를 변경하고 Production Mode캐시를 지우거나 플러시 한 다음 다시로 전환 할 수 Developer Mode있습니다.

최근에 한 서버에서 다른 서버로 데이터베이스를 옮겼 기 때문에 프론트 엔드 에서이 문제가 발생했습니다. 나는 이런 식으로 해결했다.

이 사람을 도와주세요.



0

필자의 경우이 오류는 다중 저장소, 다중 도메인 설정에 대한 것입니다. Magento는 상점 코드를 자릅니다. 도메인을 상점 코드로 맵핑하는 경우 상점 코드가 index.php에 지정된 라우팅 (또는 맵핑하는 위치)과 일치하는지 확인하십시오. 관리자의 "상점" > " 모든 상점 " 에서 확인하십시오 . 웹 사이트, 상점 및 상점보기 상점 코드를 확인하십시오.

Magento가 상점 코드를 자르면 매핑을 입력하고 모든 조정 작업을 다시 시작했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.