Installazione singola con più database


11

È possibile effettuare un'installazione e da questa installazione fare più negozi con database diversi?

Qualcosa di simile farò un'installazione su domain.1 con un database e da admin creerò un nuovo sito Web e un negozio su un nuovo database per domain.2 .

So che è possibile realizzare più negozi con un solo database. Ma può essere lo stesso con database diversi.


Puoi spiegare perché hai bisogno di 2 database? È una configurazione master / slave o vuoi solo avere 2 database separati?
Marius

Voglio solo avere 2 database separati. Ho bisogno di due negozi diversi con un'unica installazione ma database separato.
Mike,

Risposte:


3

Ottima risposta slarek. Abbiamo fatto qualcosa di molto simile. Invece di modificare index.php, impostiamo cartelle separate al di fuori della base di codice di Magento, e includiamo mage.php da quelle cartelle, quindi modificiamo etc_dir (e altre directory) come nel tuo metodo sopra.

struttura delle cartelle:

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

All'interno di ciascuna delle cartelle client sono presenti:

  • /www/clientx/etc/local.xml (con database univoco definito e redis db univoco)
  • / www / clientx / etc / modules (questo è un link sym a / www / magento / app / etc / modules)
  • /www/clientx/index.php

in /www/clientx/index.php

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

... (il resto di index.php è come al solito) ...

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

Prepariamo

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

5

Non penso che questo sia possibile fuori dalla scatola. Magento supporta la configurazione del database master / slave, ma devi averli per tutti i negozi.
E non penso che questo possa essere fatto facilmente con la codifica personalizzata poiché i negozi sono conservati nel database.

Pertanto, a seconda della vista dello store, è necessario sapere a quale database connettersi, ma per conoscere la vista dello store, è necessario eseguire una query su un database. Quindi corri in cerchio.


3

Volete avere diversi negozi separati con i loro database usando un unico codebase?

Bene, non esiste un modo semplice e consigliato per farlo. Detto questo, possiamo vedere cosa si può fare:

Le informazioni sul database provengono da un singolo file XML: app / etc / local.xml Questo file viene caricato da app / Mage.php, quindi se si modifica quel file è possibile decidere teoricamente quale file di configurazione caricare (in base alla condizione, come il nome di dominio). Voila, dominio diverso, database diverso. Ora arriva la parte cattiva notizia (tm).

  1. Stai sovrascrivendo il codice di base e la cosiddetta "classe di dio". Questa è considerata una pratica MOLTO MALE nel mondo Magento! Ogni volta che aggiorni le modifiche verranno sovrascritte.
  2. Sovrapposizione dei contenuti. Non tutti i tuoi contenuti sono archiviati nel database, c'è anche una cartella multimediale e c'è una cartella di sessione (var / session) o devi trovare una soluzione alternativa (ad esempio percorsi personalizzati basati sul database) o archiviare sia immagini che sessioni nel database (prima chiedi: sì, questo è possibile).
  3. Cache. Sicuramente non vuoi che negozi diversi condividano la cartella cache (var / cache). Fortunatamente è possibile utilizzare cache esterne, come memcached invece di archiviare file in quella cartella. Tuttavia devi assicurarti che i tuoi ID cache non si sovrappongano, perché se lo fanno, sarai nel mondo del male.
  4. Non è possibile utilizzare la compilazione (la funzione è comunque obsoleta).
  5. Forse qualcos'altro che sto dimenticando. Chiunque?

2

ho appena trovato questa estensione:
https://github.com/steverobbins/Magento-Multi_Client

Magento Multi Client
Ospita più client sulla stessa base di codice Magento.

Ogni client ha il proprio local.xml e etc / modules.xml. Ciò consente di specificare database e servizi di memorizzazione nella cache separati per client, nonché abilitare / disabilitare i moduli come richiesto.

Ogni client mantiene la propria indipendenza ma condivide una base di codice.

Questo potrebbe essere considerato un approccio alla Magento Go-esque per l'hosting di siti Web Magento.


2

Devi solo creare una nuova cartella per contenere i file di configurazione e in index.php aggiungi una serie di opzioni a Mage :: Run ().

In quella cartella avrai lo stesso contenuto dell'app / etc / inclusa la cartella dei moduli.

Primo dominio:

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

Secondo dominio:

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

questo dirà a Magento dove sono i file di configurazione per il dominio.


1

Qual è il tuo obiettivo principale? Area di amministrazione diversa o gestione più semplice del codice sorgente?

Lo farei con un mix di file e directory "locali" e file e directory comuni collegati (ln -s)

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

Comune

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

"Locale"

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

Ma potrebbe essere un po 'confuso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.