Instalación única con múltiples bases de datos.

11

¿Es posible hacer una instalación, y desde esta instalación hacer múltiples tiendas con diferentes bases de datos?

Algo así como haré una instalación en domain.1 con una base de datos, y desde el administrador crearé un nuevo sitio web y una tienda en alguna nueva base de datos para domain.2 .

Sé que se pueden lograr múltiples tiendas con una sola base de datos. Pero puede ser lo mismo con diferentes bases de datos.

Miguel
fuente
¿Puedes explicar por qué necesitas 2 bases de datos? ¿Es una configuración maestro / esclavo o solo quiere tener 2 bases de datos separadas?
Marius
Solo quiero tener 2 bases de datos separadas. Necesito dos tiendas diferentes con una instalación pero una base de datos separada.
Mike

Respuestas:

3

Gran respuesta slarek. Hicimos algo muy similar. En lugar de editar index.php, configuramos carpetas separadas fuera de la base de código de magento e incluimos mage.php de esas carpetas, y luego editamos el etc_dir (y otros directorios) como en su método anterior.

estructura de carpetas:

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

Dentro de cada una de las carpetas del cliente están:

  • /www/clientx/etc/local.xml (con base de datos única definida y redis db única)
  • / www / clientx / etc / modules (este es un enlace simbólico a / www / magento / app / etc / modules)
  • /www/clientx/index.php

en /www/clientx/index.php

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

... (resto de index.php es lo de siempre) ...

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

Establecimos

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

No creo que esto sea posible fuera de la caja. Magento admite la configuración de la base de datos maestra / esclava, pero debe tenerlas para todas las tiendas.
Y no creo que esto se pueda hacer fácilmente con una codificación personalizada, ya que las tiendas se mantienen en la base de datos.

Entonces, dependiendo de la vista de la tienda, necesita saber a qué base de datos conectarse, pero para conocer la vista de la tienda, debe consultar una base de datos. Entonces corres en círculos.

Marius
fuente
3

¿Desea tener varias tiendas separadas con sus propias bases de datos utilizando una única base de código?

Bueno, no hay una forma simple y recomendada de hacerlo. Dicho esto, podemos ver lo que se PUEDE hacer:

La información de la base de datos proviene de un único archivo xml: app / etc / local.xml Este archivo se está cargando desde app / Mage.php, por lo que si cambia ese archivo, en teoría puede decidir qué archivo de configuración va a cargar (según lo deseado condición, como el nombre de dominio). Voila, dominio diferente, base de datos diferente. Ahora viene la parte de malas noticias (tm).

  1. Estás sobrescribiendo el código central y la llamada "clase de dios". ¡Esto se considera una práctica MUY MALA en el mundo de Magento! Cada vez que actualice sus cambios se sobrescribirán.
  2. Contenido superpuesto. No todo su contenido se almacena en la base de datos, también hay una carpeta de medios y una carpeta de sesión (var / session) para la que necesita encontrar una solución alternativa (por ejemplo, rutas personalizadas basadas en la base de datos) o almacenar imágenes y sesiones en la base de datos (antes preguntas: sí, esto es posible).
  3. Cache. Sin duda, no quiere que diferentes tiendas compartan la carpeta de caché (var / cache). Afortunadamente, es posible usar cachés externos, como memcached en lugar de almacenar archivos en esa carpeta. Aún así, debes asegurarte de que tus ID de caché no se superpongan, porque si lo hacen, estarás en el mundo del daño.
  4. No puede usar la compilación (la característica está en desuso de todos modos).
  5. Quizás algo más que estoy olvidando. ¿Nadie?
Pronto
fuente
2

acabo de encontrar esta extensión:
https://github.com/steverobbins/Magento-Multi_Client

Magento Multi Client
Hospede múltiples clientes en la misma base de código de Magento.

Cada cliente tiene su propio local.xml y etc / modules.xml. Esto le permite especificar bases de datos separadas y servicios de almacenamiento en caché por cliente, así como habilitar / deshabilitar módulos según se solicite.

Cada cliente mantiene su independencia pero comparte una base de código.

Esto podría considerarse un enfoque de Magento Go-esque para alojar sitios web de Magento.


fuente
2

Solo necesita crear una nueva carpeta para contener los archivos de configuración y en index.php agrega una matriz de opciones a Mage :: Run ().

En esa carpeta tendrá todo el mismo contenido que la aplicación / etc / incluida la carpeta de módulos.

Primer dominio:

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

Segundo dominio:

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

Esto le dirá a Magento dónde están los archivos de configuración para el dominio.

slarek
fuente
1

¿Cuál es tu objetivo principal? ¿Área de administración diferente o manejo más fácil de su código fuente?

Lo haría con una combinación de directorios y archivos "locales" y directorios y archivos comunes vinculados (ln -s)

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

común

  • aplicación /
  • js /
  • lib /
  • ...

"local"

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

Pero podría ser un poco confuso.

waltavista
fuente