Одна установка с несколькими базами данных

11

Можно ли сделать одну установку, а из этой установки сделать несколько магазинов с разными базами данных?

Что-то вроде этого я сделаю одну установку на domain.1 с базой данных, а от администратора я создам новый веб-сайт и магазин в новой базе данных для domain.2 .

Я знаю, что с одной базой данных можно создать несколько магазинов. Но может ли это быть одинаково с разными базами данных?

Майк
источник
Можете ли вы объяснить, почему вам нужны 2 базы данных? Это конфигурация master / slave или просто хотите иметь 2 отдельные базы данных?
Мариус
Я просто хочу иметь 2 отдельные базы данных. Мне нужно два разных магазина с одной установкой, но отдельной базой данных.
Майк

Ответы:

3

Отличный ответ, сларек. Мы сделали что-то очень похожее. Вместо того, чтобы редактировать index.php, мы устанавливаем отдельные папки вне кодовой базы magento и включаем mage.php из этих папок, а затем редактируем etc_dir (и другие dir), как в вашем методе выше.

структура папок:

/ www / client1
/ www / client2
/ www / client3
/ www / clientX
/ www / magento

Внутри каждой клиентской папки находятся:

  • /www/clientx/etc/local.xml (с определением уникальной базы данных и уникальной базы данных redis)
  • / 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 поддерживает конфигурацию базы данных master / slave, но вы должны иметь ее для всех хранилищ.
И я не думаю, что это легко сделать с помощью пользовательского кодирования, поскольку магазины хранятся в базе данных.

Поэтому, в зависимости от представления магазина, вам нужно знать, к какой базе данных подключаться, но для того, чтобы узнать представление магазина, вам нужно запросить базу данных. Так ты бегаешь по кругу.

Мариус
источник
3

Вы хотите иметь несколько отдельных хранилищ со своими базами данных, использующими единую кодовую базу?

Ну, нет простого и рекомендуемого способа сделать это. При этом мы можем видеть, что МОЖЕТ быть сделано:

Информация о базе данных поступает из одного XML-файла: app / etc / local.xml Этот файл загружается из app / Mage.php, поэтому, если вы измените этот файл, вы можете теоретически решить, какой файл конфигурации вы собираетесь загрузить (в зависимости от желаемого условие, такое как доменное имя). Вуаля, другой домен, другая база данных. Теперь идет часть плохих новостей (тм).

  1. Вы переписываете основной код и так называемый «класс бога». Это считается ОЧЕНЬ ПЛОХОЙ практикой в ​​мире Magento! Каждый раз, когда вы обновляете, ваши изменения будут перезаписаны.
  2. Содержание перекрывается. Не весь ваш контент хранится в базе данных, есть также папка мультимедиа и папка сеанса (var / session), для которой вам нужно либо найти обходной путь (например, пользовательские пути на основе базы данных), либо сохранить изображения и сеансы в базе данных (до Вы спрашиваете: да, это возможно).
  3. Кэш. Вы наверняка не хотите, чтобы разные хранилища разделяли общую папку кеша (var / cache). К счастью, можно использовать внешние кэши, такие как memcached, вместо хранения файлов в этой папке. Тем не менее, вы должны убедиться, что ваши идентификаторы кэша не будут перекрываться, потому что если они это сделают, вы попадете в мир вреда.
  4. Вы не можете использовать компиляцию (эта функция в любом случае устарела).
  5. Может быть, что-то еще я забыл. Кто-нибудь?
без промедления
источник
2

я только что нашел это расширение:
https://github.com/steverobbins/Magento-Multi_Client

Magento Multi Client
Размещайте несколько клиентов на одной базе кода Magento.

У каждого клиента есть свои local.xml и etc / modules.xml. Это позволяет вам указывать отдельные базы данных и службы кэширования для каждого клиента, а также включать / отключать модули по запросу.

Каждый клиент поддерживает свою независимость, но разделяет кодовую базу.

Это можно считать подходом Magento Go-esque к размещению веб-сайтов Magento.


источник
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, где находятся файлы конфигурации для домена.

slarek
источник
1

Какова ваша главная цель? Другая область администрирования или более простая обработка вашего исходного кода?

Я бы сделал это с помощью «локальных» каталогов и файлов и связанных (ln -s) общих каталогов и файлов.

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

общий

  • приложение/
  • JS /
  • Библиотека /
  • ...

"местный"

  • / Вар /
  • index.php
  • .htaccess
  • приложение / и т.д. / local.xml

Но может быть немного запутанным.

waltavista
источник