在我们的Multisitesite / 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 =这些给出404 /尝试选择一个不存在的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
在删除网站/商店视图之前,我已经将这三个表与数据库的备份副本进行了比较,并且-除了删除了上述网站/商店视图之外-一切看起来都完全相同。相同的ID,相同的代码等。
据我所知,这三个表是Magento唯一检查的storeview /网站代码和ID的表。
对于故障排除,我已经执行了以下操作:为了确保没有保留具有旧配置的缓存,如:清空var / cache,清空缓存,重新索引,重新启动服务器等,所有这些都无济于事。
即使所有php / magento都已登录,开发人员模式等,我仍无法了解为什么发生这种情况的零线索。没有异常被记录。
所以这两个问题是:为什么Magento试图选择一个不存在的storeview范围而不是网站范围,以及如何解决这个问题?
更新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个(已禁用)商店视图。
为确保以前没有问题,我转到了保存在开发服务器(magento 1.9.1.0版)上的较旧版本的站点之一。
在这里,一切工作正常,即website_id
6
无需store_id
6
在core_store
表中加载就可以加载。