Installation unique avec plusieurs bases de données

11

Est-il possible de faire une seule installation, et à partir de cette installation de faire plusieurs boutiques avec différentes bases de données?

Quelque chose comme je ferai une installation sur domain.1 avec une base de données, et de l'administrateur je créerai un nouveau site Web et un magasin sur une nouvelle base de données pour domain.2 .

Je sais que plusieurs magasins peuvent être réalisés avec une seule base de données. Mais peut-il en être de même avec différentes bases de données.

Mike
la source
Pouvez-vous expliquer pourquoi vous avez besoin de 2 bases de données? S'agit-il d'une configuration maître / esclave ou voulez-vous simplement avoir 2 bases de données distinctes?
Marius
Je veux juste avoir 2 bases de données distinctes. J'ai besoin de deux magasins différents avec une seule installation mais une base de données distincte.
Mike

Réponses:

3

Grande réponse slarek. Nous avons fait quelque chose de très similaire. Au lieu de modifier index.php, nous configurons des dossiers séparés en dehors de la base de code de magento, et incluons mage.php à partir de ces dossiers, puis éditons le etc_dir (et les autres répertoires) comme dans votre méthode ci-dessus.

structure des dossiers:

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

À l'intérieur de chacun des dossiers clients se trouvent:

  • /www/clientx/etc/local.xml (avec une base de données unique définie et une redis db unique)
  • / www / clientx / etc / modules (il s'agit d'un lien sym vers / www / magento / app / etc / modules)
  • /www/clientx/index.php

dans /www/clientx/index.php

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

... (le reste de index.php fonctionne comme d'habitude) ...

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

Nous fixons

$_SERVER['CLIENT_ID'] in Nginx with 
`fastcgi_param  CLIENT_ID clientx; `
Connor Tobin
la source
5

Je ne pense pas que cela soit possible hors de la boîte. Magento prend en charge la configuration de la base de données maître / esclave, mais vous devez les avoir pour tous les magasins.
Et je ne pense pas que cela puisse être fait facilement avec un codage personnalisé car les magasins sont conservés dans la base de données.

Ainsi, selon la vue du magasin, vous devez savoir à quelle base de données vous connecter, mais pour connaître la vue du magasin, vous devez interroger une base de données. Vous courez donc en rond.

Marius
la source
3

Vous souhaitez avoir plusieurs magasins distincts avec leurs propres bases de données en utilisant une base de code unique?

Eh bien, il n'y a pas de moyen simple et recommandé de le faire. Cela étant dit, nous pouvons voir ce qui PEUT être fait:

Les informations de la base de données proviennent d'un seul fichier xml: app / etc / local.xml Ce fichier est en cours de chargement depuis app / Mage.php, donc si vous changez ce fichier, vous pouvez théoriquement décider quel fichier de configuration vous allez charger (en fonction de (par exemple, nom de domaine). Voila, domaine différent, base de données différente. Vient maintenant la partie Bad News (tm).

  1. Vous écrasez le code de base et ce qu'on appelle la "classe divine" à cela. Ceci est considéré comme une très mauvaise pratique dans le monde de Magento! À chaque mise à niveau, vos modifications seront écrasées.
  2. Chevauchement de contenu. Tout votre contenu n'est pas stocké dans la base de données, il y a aussi un dossier multimédia et il y a un dossier de session (var / session) pour lequel vous devez soit trouver une solution de contournement (par exemple des chemins personnalisés basés sur la base de données), soit stocker à la fois des images et des sessions dans la base de données (avant vous demandez: oui, c'est possible).
  3. Cache. Vous ne voulez certainement pas que vous partagiez le dossier de cache de différents magasins (var / cache). Heureusement, il est possible d'utiliser des caches externes, tels que memcached au lieu de stocker des fichiers dans ce dossier. Vous devez toujours vous assurer que vos ID de cache ne se chevaucheront pas, car s'ils le font, vous allez être dans le monde du mal.
  4. Vous ne pouvez pas utiliser la compilation (la fonctionnalité est de toute façon obsolète).
  5. Peut-être autre chose que j'oublie. N'importe qui?
Pronto
la source
2

je viens de trouver cette extension:
https://github.com/steverobbins/Magento-Multi_Client

Magento Multi Client
Hébergez plusieurs clients sur la même base de code Magento.

Chaque client a son propre local.xml et etc / modules.xml. Cela vous permet de spécifier des bases de données et des services de mise en cache distincts par client, ainsi que d'activer / désactiver des modules comme demandé.

Chaque client conserve son indépendance mais partage une base de code.

Cela pourrait être considéré comme une approche Magento Go-esque pour l'hébergement de sites Web Magento.


la source
2

Vous avez juste besoin de créer un nouveau dossier pour contenir les fichiers de configuration et dans index.php vous ajoutez un tableau d'options à Mage :: Run ().

Dans ce dossier, vous aurez le même contenu que app / etc /, y compris le dossier modules.

Premier domaine:

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

Deuxième domaine:

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

cela indiquera à Magento où se trouvent les fichiers de configuration pour le domaine.

slarek
la source
1

Quel est votre objectif principal? Zone d'administration différente ou gestion plus facile de votre code source?

Je le ferais avec un mélange de répertoires et fichiers "locaux" et de répertoires et fichiers communs liés (ln -s)

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

commun

  • app /
  • js /
  • lib /
  • ...

"local"

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

Mais cela pourrait être un peu déroutant.

waltavista
la source