Einzelinstallation mit mehreren Datenbanken

11

Ist es möglich, eine Installation durchzuführen und aus dieser Installation mehrere Shops mit unterschiedlichen Datenbanken zu erstellen?

So etwas wie ich werde eine Installation auf Domain.1 mit einer Datenbank durchführen, und vom Administrator werde ich eine neue Website und einen Speicher in einer neuen Datenbank für Domain.2 erstellen .

Ich weiß, dass mit einer Datenbank mehrere Geschäfte erreicht werden können. Kann es aber bei verschiedenen Datenbanken gleich sein?

Mike
quelle
Können Sie erklären, warum Sie 2 Datenbanken benötigen? Handelt es sich um eine Master / Slave-Konfiguration oder möchten Sie nur zwei separate Datenbanken haben?
Marius
Ich möchte nur 2 separate Datenbanken haben. Ich benötige zwei verschiedene Geschäfte mit einer Installation, aber einer separaten Datenbank.
Mike

Antworten:

3

Tolle Antwort, Slarek. Wir haben etwas sehr ähnliches gemacht. Anstatt index.php zu bearbeiten, richten wir separate Ordner außerhalb der Codebasis von magento ein, fügen mage.php aus diesen Ordnern hinzu und bearbeiten dann das etc_dir (und andere Verzeichnisse) wie in Ihrer obigen Methode.

Ordnerstruktur:

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

In jedem der Client-Ordner befinden sich:

  • /www/clientx/etc/local.xml (mit definierter eindeutiger Datenbank und eindeutiger Redis-Datenbank)
  • / www / clientx / etc / modules (dies ist ein Sym-Link zu / www / magento / app / etc / modules)
  • /www/clientx/index.php

in /www/clientx/index.php

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

... (der Rest von index.php ist wie gewohnt) ...

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

Legen wir fest

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

Ich denke nicht, dass dies sofort möglich ist. Magento unterstützt die Konfiguration der Master / Slave-Datenbank, aber Sie müssen sie für alle Geschäfte haben.
Und ich denke nicht, dass dies mit benutzerdefinierter Codierung einfach möglich ist, da die Speicher in der Datenbank gespeichert sind.

Abhängig von der Geschäftsansicht müssen Sie also wissen, zu welcher Datenbank eine Verbindung hergestellt werden soll. Um jedoch die Geschäftsansicht zu kennen, müssen Sie eine Datenbank abfragen. Sie rennen also im Kreis herum.

Marius
quelle
3

Sie möchten mehrere separate Geschäfte mit eigenen Datenbanken mit einer einzigen Codebasis haben?

Nun, es gibt keinen einfachen und empfohlenen Weg, dies zu tun. Davon abgesehen können wir sehen, was getan werden kann:

Datenbankinformationen stammen aus einer einzelnen XML-Datei: app / etc / local.xml Diese Datei wird aus app / Mage.php geladen. Wenn Sie diese Datei ändern, können Sie theoretisch entscheiden, welche Konfigurationsdatei Sie laden möchten (basierend auf den gewünschten Bedingung, wie z. B. Domainname). Voila, andere Domain, andere Datenbank. Jetzt kommt der Bad News Part (tm).

  1. Sie überschreiben den Kerncode und die sogenannte "Gottklasse". Dies wird in der Magento-Welt als SEHR SCHLECHTE Praxis angesehen! Jedes Mal, wenn Sie ein Upgrade durchführen, werden Ihre Änderungen überschrieben.
  2. Inhalt überlappt sich. Nicht alle Ihre Inhalte werden in der Datenbank gespeichert, es gibt auch einen Medienordner und einen Sitzungsordner (var / session), für die Sie entweder eine Problemumgehung finden müssen (z. B. benutzerdefinierte Pfade basierend auf der Datenbank) oder Bilder und Sitzungen in der Datenbank speichern müssen (zuvor) Sie fragen: Ja, das ist möglich.
  3. Zwischenspeicher. Sie möchten mit Sicherheit nicht, dass verschiedene Geschäfte den Cache-Ordner (var / cache) gemeinsam nutzen. Glücklicherweise ist es möglich, externe Caches wie Memcached zu verwenden, anstatt Dateien in diesem Ordner zu speichern. Trotzdem müssen Sie sicherstellen, dass sich Ihre Cache-IDs nicht überschneiden, denn wenn dies der Fall ist, befinden Sie sich in der Welt der Verletzungen.
  4. Sie können die Kompilierung nicht verwenden (die Funktion ist ohnehin veraltet).
  5. Vielleicht etwas anderes, das ich vergesse. Jemand?
Pronto
quelle
2

Ich habe gerade diese Erweiterung gefunden:
https://github.com/steverobbins/Magento-Multi_Client

Magento Multi Client
Hosten Sie mehrere Clients auf derselben Magento-Codebasis.

Jeder Client hat seine eigene local.xml und etc / modules.xml. Auf diese Weise können Sie separate Datenbanken und Caching-Services pro Client angeben sowie Module nach Bedarf aktivieren / deaktivieren.

Jeder Client behält seine Unabhängigkeit bei, teilt jedoch eine Codebasis.

Dies könnte als Magento Go-esque-Ansatz für das Hosten von Magento-Websites angesehen werden.


quelle
2

Sie müssen nur einen neuen Ordner erstellen, der die Konfigurationsdateien enthält, und in index.php fügen Sie Mage :: Run () eine Reihe von Optionen hinzu.

In diesem Ordner befindet sich derselbe Inhalt wie in app / etc / einschließlich des Modulordners.

Erste Domain:

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

Zweite Domain:

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

Dadurch wird Magento mitgeteilt, wo sich die Konfigurationsdateien für die Domäne befinden.

Slarek
quelle
1

Was ist dein Hauptziel? Anderer Admin-Bereich oder einfachere Handhabung Ihres Quellcodes?

Ich würde es mit einer Mischung aus "lokalen" Verzeichnissen und Dateien und verknüpften (ln -s) allgemeinen Verzeichnissen und Dateien tun

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

verbreitet

  • App /
  • js /
  • lib /
  • ...

"lokal"

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

Könnte aber etwas verwirrend sein.

waltavista
quelle