一次安装,多个数据库


11

是否可以进行一次安装,并通过该安装来使多个商店使用不同的数据库?

像我将在domain.1上进行安装的一个数据库,然后从admin创建一个新的网站,并在domain.2的一些新数据库上建立一个商店。

我知道一个数据库可以实现多个存储。但是不同的数据库是否可以相同。


您能解释为什么需要两个数据库吗?它是主/从配置还是只想拥有2个独立的数据库?
马里斯(Marius)

我只想拥有2个独立的数据库。我需要两个不同的商店,一个安装,但数据库分开。
2014年

Answers:


3

好的答案,slarek。我们做了非常相似的事情。与编辑index.php相比,我们在magento的代码库之外设置了单独的文件夹,并从这些文件夹中包含了mage.php,然后像上述方法一样编辑etc_dir(和其他目录)。

文件夹结构:

/网络/客户端1
/网络/客户端2
/网络/ client3
/网络/ clientX
/网络/ Magento的

每个客户端文件夹中都有:

  • /www/clientx/etc/local.xml(定义了唯一的数据库,并且唯一的redis db)
  • / www / clientx / etc / modules(这是/ www / magento / app / etc / modules的符号链接)
  • /www/clientx/index.php

在/www/clientx/index.php中

define('MAGENTO_ROOT', '/www/magento');

...(index.php的其余部分照常营业)...

$client = isset($_SERVER['CLIENT_ID']) ? $_SERVER['CLIENT_ID'] : '';] Mage::run($mageRunCode, $mageRunType, array('etc_dir'=>'../'.$client));

我们设置

$_SERVER['CLIENT_ID'] in Nginx with 
`fastcgi_param  CLIENT_ID clientx; `

5

我认为这是不可能的。Magento支持主/从数据库配置,但是您必须为所有存储使用它们。
而且我不认为通过自定义编码可以轻松完成此操作,因为商店存储在数据库中。

因此,根据商店视图,您需要知道要连接到哪个数据库,但是为了知道商店视图,您需要查询数据库。所以你绕圈跑。


3

您是否希望使用单个代码库将几个单独的商店与自己的数据库一起使用?

好吧,没有简单且推荐的方法可以做到这一点。话虽如此,我们可以看到可以做什么:

数据库信息来自单个xml文件:app / etc / local.xml该文件是从app / Mage.php加载的,因此,如果更改该文件,则可以从理论上确定要加载的配置文件(根据需要)条件,例如域名)。Voila,不同的域,不同的数据库。现在是坏消息部分(tm)。

  1. 您正在覆盖核心代码,这就是所谓的“神类”。这被认为是Magento世界中非常糟糕的练习!每次升级时,所做的更改都会被覆盖。
  2. 内容重叠。并非所有内容都存储在数据库中,还有媒体文件夹和会话文件夹(var / session),您需要找到解决方法(例如,基于数据库的自定义路径),或者将图像和会话都存储在数据库中(之前您问:是的,这是可能的。
  3. 快取。您最肯定不希望您的其他商店共享缓存文件夹(var / cache)。幸运的是,可以使用外部缓存(例如memcached)来代替将文件存储到该文件夹​​中。不过,您仍然必须确保您的缓存ID不会重叠,因为如果它们重叠,那么您将遭受重创。
  4. 您不能使用编译(无论如何,该功能已被弃用)。
  5. 也许我忘记了其他事情。任何人?

2

我刚刚找到了这个扩展名:https :
//github.com/steverobbins/Magento-Multi_Client

Magento多客户
端在同一Magento代码库上托管多个客户端。

每个客户端都有自己的local.xml和etc / modules.xml。这使您可以为每个客户端指定单独的数据库和缓存服务,以及根据要求启用/禁用模块。

每个客户保持独立性,但共享一个代码库。

这可以被视为托管Magento网站的Magento Go-esque方法。


2

您只需要创建一个包含配置文件的新文件夹,并在index.php中向Mage :: Run()添加一个选项数组即可。

在该文件夹中,您将拥有与app / etc /相同的所有内容,包括modules文件夹。

第一域:

Mage::run($mageRunCode, $mageRunType, array('etc_dir'=>'app/domain1'));

第二域:

Mage::run($mageRunCode, $mageRunType, array('etc_dir'=>'app/domain2'));

这将告诉Magento域的配置文件在哪里。


1

您的主要目标是什么?不同的管理区域还是更易于处理源代码?

我会混合使用“本地”目录和文件以及链接的(ln -s)通用目录和文件

/ www / common / www / shop1 / www / shop2

共同

  • 应用/
  • js /
  • lib /
  • ...

“本地”

  • / var /
  • index.php
  • .htaccess
  • app / etc / local.xml

但是可能会有些混乱。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.