두 개의 "웹 사이트"구성 범위를 제외한 Magento Backend 404


14

우리의 Multiwebsite / Multistore (view) Magento 1.9.2.2 구성에서 웹 사이트의 store 및 storeview를 포함하여 웹 사이트 중 하나를 제거해야했습니다.

제거 자체가 잘 진행되었지만 (이전에 해본 적이 있음) 현재 구성 범위를 두 개의 웹 사이트로 변경하면 404의 백엔드가 생겼습니다.

새 구성 범위를 선택하면 다음 URL이 요청됩니다 (관리자 경로 + 키가 변경됨).

/index.php/mymageadmin/system_config/edit/section/dev/website/<WEBSITE>/key/1221231/

여기서 <WEBSITE>받는 동일한 code필드 core_website테이블.

mysql 쿼리 로깅을 사용하면 성공적으로로드 할 수있는 두 개의 웹 사이트가 웹 사이트 / 상점보기 선택과 관련하여 이러한 쿼리가 있음을 알 수 있습니다.

SELECT `main_table`.* FROM `core_config_data` AS `main_table` WHERE (`scope` = 'websites') AND (`scope_id` = '4') AND (`path` LIKE 'dev/%')
SELECT `core_website`.* FROM `core_website` WHERE (`core_website`.`code`='working_store_code')

404를 제공하는 다른 웹 사이트는 동일한 첫 번째 쿼리로 시작하지만 물론 다른 scope_id로 시작하지만 두 번째 쿼리에서는 Magento가 storeview대신 스코프를 찾아야한다고 생각합니다 website. 실제로 두 번 시도하는 것 같습니다.

SELECT `main_table`.* FROM `core_config_data` AS `main_table` WHERE (`scope` = 'websites') AND (`scope_id` = '3') AND (`path` LIKE 'dev/%')
SELECT `core_store`.* FROM `core_store` WHERE (`core_store`.`store_id`=3) ORDER BY `sort_order` ASC
SELECT `core_store`.* FROM `core_store` WHERE (`core_store`.`store_id`=3) ORDER BY `sort_order` ASC

내 core_website 테이블은 다음과 같습니다.

website_id code           sort_order     default_group_id  is_default
0          admin          0              0                 0
1          working_one    1              1                 1
3          failing_one    2              4                 0
4          working_two    3              9                 0
6          failing_two    4              16                0
7          failing_three  5              15                0
8          failing_four   6              17                0
9          failing_six    7              18                0

working_xxx =로드 가능, failing_xxx = 존재하지 않는 store_id를 선택하려고 시도합니다.

내 core_store 테이블은 다음과 같습니다. (코드 + 이름이 관련이없는 것으로 제거됨)

store_id website_id group_id sort_order is_active
0        0          0        0          1
1        1          1        0          1
4        3          4        1          1
5        3          4        2          1
10       4          9        0          1
19       7          15       0          1
20       4          9        1          1
21       4          9        2          1
22       4          9        4          0
23       6          16       1          1
24       6          16       2          1
26       4          9        4          1
28       7          15       0          1
29       1          1        2          1
30       8          17       0          1
31       9          18       0          1
32       9          18       0          1
33       8          17       2          1
34       8          17       3          1
35       8          17       4          1
36       4          9        10         1

그리고 이것은 core_store_group입니다.

group_id website_id name            root_cat_id default_store_id
1        1          working_one     50          1
4        3          failing_one     44          4
9        4          working_one     77          10
15       7          failing_two     70          19
16       6          failing_three   46          23
17       8          failing_four    50          30
18       9          failing_five    96          31

웹 사이트 / storeview를 제거하기 전에이 세 테이블을 DB의 백업 사본과 비교했습니다. 웹 사이트 / storeview 제거를 제외하고는 모두 똑같이 보입니다. 동일한 ID, 동일한 코드 등

내가 아는 한이 세 가지 테이블은 Magento가 storeview / website 코드 및 ID를 확인하는 유일한 테이블입니다.

문제 해결과 관련하여 다음을 수행했습니다. 비워 둔 var / cache, 플러시 된 캐시, 재 인덱싱, 서버 재부팅 등 이전 구성이 남아있는 캐시를 사용하지 않으려면 모두 사용할 수 없습니다.

모든 PHP / 마 젠토 로그온, 개발자 모드 등이 있어도 왜 이런 일이 발생했는지에 대한 단서가 없습니다. 예외는 기록되지 않습니다.

따라서 두 가지 질문이 있습니다. Magento가 웹 사이트 범위 대신 존재하지 않는 상점보기 범위를 선택하려고하는 이유와이를 해결하는 방법은 무엇입니까?

업데이트 1 / 해결 방법

magento-db-repair 도구를 포함하되 이에 국한되지 않는 긴 하루 동안의 문제 해결 후 모든 원래 웹 사이트 및 저장소보기를 사용하여 core_store, core_store_group 및 core_website 테이블을 다시 생성하면 마침내 다음을 발견했습니다.

모든 website_id로드 store_id에 대해 같은 숫자의가 있습니다. website_id 1그리고 4예상대로로드, 실제로 (무관)가된다 store_id 14정의.

를 들어 website_id 3, 6, 7, 89더이없는 store_id같은 수의.

그러나 예를 들어에 가짜 항목을 작성 하면 구성 범위를 다시 로드 하기 시작했습니다.store_id3website_id 3

이제 해결 방법을 성공적으로 배치했지만 추가 (비활성화) 웹 사이트 하나와 5 (비활성화) 저장소보기로 끝났습니다 ....

이전에는 이것이 문제가되지 않았 음을 확인하기 위해 dev 서버 (magento 버전 1.9.1.0)에 보관하고있는 사이트의 이전 사본 중 하나를 방문했습니다.

여기서 모든 것이 완벽하게 작동합니다. 즉 , 테이블 에가 website_id 6없어도로드됩니다 . store_id 6core_store


모든 것을 변경했을 때 URL 색인을 실행 했습니까?
Anthony Cicchelli

@AnthonyCicchelli 님, 부탁드립니다. 이것은 실제로이 문제를 해결하기 위해 시도한 첫 번째 방법 중 하나 였지만 아무 소용이 없습니다. (
Ottonet

많은 요소가 있으므로 여기에서 말하기가 어렵고 DB에서 모든 URL을 플러시하고 URL을 다시 실행하십시오. 저를 기반으로하는 소리. 매우 위와 같이 DB와 ​​직접 작업하십시오. 그렇지 않으면 모든 것이 손상 될 수있는 백업이 있는지 확인하십시오.
Anthony Cicchelli

나는 이것이 "프론트 엔드"문제 (예 : URL- 인덱스)가 아니라 마 젠토 코드의 어딘가에 더 많은 "백엔드"문제라고 확신한다. 나에게 그것은 Magento가 website_id / store_id의 특정 시퀀스 / 조합을 기대하는 것처럼 느낍니다. 여기서 당신은 일부 중간의 "중간"을 제거하면 magento가 해당 website_id를 일치시키고로드 할 수 없습니다.
Ottonet

답변:


2

단일 웹 사이트 저장소에서 비슷한 문제가 발생했으며 다음 쿼리로 해결되었습니다.

SET SQL_SAFE_UPDATES=0;
SET FOREIGN_KEY_CHECKS=0;
UPDATE `core_store` SET store_id = 0 WHERE code='admin';
UPDATE `core_store_group` SET group_id = 0 WHERE name='Default';
UPDATE `core_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;
SET SQL_SAFE_UPDATES=1;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.