우리의 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
1
및 4
정의.
를 들어 website_id
3
, 6
, 7
, 8
및 9
더이없는 store_id
같은 수의.
그러나 예를 들어에 가짜 항목을 작성 하면 구성 범위를 다시 로드 하기 시작했습니다.store_id
3
website_id
3
이제 해결 방법을 성공적으로 배치했지만 추가 (비활성화) 웹 사이트 하나와 5 (비활성화) 저장소보기로 끝났습니다 ....
이전에는 이것이 문제가되지 않았 음을 확인하기 위해 dev 서버 (magento 버전 1.9.1.0)에 보관하고있는 사이트의 이전 사본 중 하나를 방문했습니다.
여기서 모든 것이 완벽하게 작동합니다. 즉 , 테이블 에가 website_id
6
없어도로드됩니다 . store_id
6
core_store