Instalação única com vários bancos de dados

11

É possível fazer uma instalação e, a partir dessa instalação, fazer várias lojas com bancos de dados diferentes?

Algo como eu farei uma instalação no domain.1 com um banco de dados e, do administrador, criarei um novo site e uma loja em algum novo banco de dados para domain.2 .

Eu sei que várias lojas podem ser alcançadas com um banco de dados. Mas pode ser o mesmo com bancos de dados diferentes.

Mike
fonte
Você pode explicar por que você precisa de 2 bancos de dados? É uma configuração mestre / escravo ou apenas deseja ter 2 bancos de dados separados?
Marius
Eu só quero ter 2 bancos de dados separados. Preciso de dois repositórios diferentes com uma instalação, mas com banco de dados separado.
Mike

Respostas:

3

Ótima resposta slarek. Fizemos algo muito semelhante. Em vez de editar o index.php, configuramos pastas separadas fora da base de código do magento, incluímos o mage.php dessas pastas e depois editamos o etc_dir (e outros diretórios) como no método acima.

estrutura de pastas:

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

Dentro de cada uma das pastas do cliente estão:

  • /www/clientx/etc/local.xml (com banco de dados exclusivo definido e redis db exclusivo)
  • / www / clientx / etc / modules (este é um link sym para / www / magento / app / etc / modules)
  • /www/clientx/index.php

em /www/clientx/index.php

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

... (o restante do index.php é comercial como sempre) ...

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

Montamos

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

Eu não acho que isso seja possível imediatamente. O Magento suporta a configuração de banco de dados mestre / escravo, mas você precisa deles para todas as lojas.
E não acho que isso possa ser feito facilmente com a codificação personalizada, pois as lojas são mantidas no banco de dados.

Portanto, dependendo da visualização da loja, você precisa saber a qual banco de dados se conectar, mas, para conhecer a visualização da loja, é necessário consultar um banco de dados. Então você corre em círculos.

Marius
fonte
3

Deseja ter vários repositórios separados com seus próprios bancos de dados usando uma única base de código?

Bem, não há uma maneira simples e recomendada de fazer isso. Dito isto, podemos ver o que PODE ser feito:

As informações do banco de dados vêm de um único arquivo xml: app / etc / local.xml Este arquivo está sendo carregado no app / Mage.php; portanto, se você alterar esse arquivo, poderá teoricamente decidir qual arquivo de configuração será carregado (com base nos condição, como nome de domínio). Voila, domínio diferente, banco de dados diferente. Agora vem a parte das más notícias (tm).

  1. Você está substituindo o código principal e a chamada "classe divina". Isso é considerado uma prática MUITO RUIM no mundo Magento! Toda vez que você atualizar, suas alterações serão substituídas.
  2. Sobreposição de conteúdo. Nem todo o seu conteúdo é armazenado no banco de dados, há também a pasta media e a pasta session (var / session) para as quais você precisa encontrar uma solução alternativa (por exemplo, caminhos personalizados baseados no banco de dados) ou armazenar imagens e sessões no banco de dados (antes você pergunta: sim, isso é possível).
  3. Cache. Você certamente não deseja que diferentes lojas compartilhem a pasta de cache (var / cache). Felizmente, é possível usar caches externos, como memcached, em vez de armazenar arquivos nessa pasta. Ainda assim, você deve garantir que seus IDs de cache não se sobreponham, porque se o fizerem, você estará no mundo da mágoa.
  4. Você não pode usar a compilação (o recurso está obsoleto).
  5. Talvez algo mais que eu esteja esquecendo. Alguém?
Pronto
fonte
2

Acabei de encontrar esta extensão:
https://github.com/steverobbins/Magento-Multi_Client

Multi Cliente Magento
Hospede vários clientes na mesma base de código Magento.

Cada cliente possui seu próprio local.xml e etc / modules.xml. Isso permite especificar bancos de dados e serviços de armazenamento em cache separados por cliente, além de ativar / desativar os módulos, conforme solicitado.

Cada cliente mantém sua independência, mas compartilha uma base de código.

Isso pode ser considerado uma abordagem do Magento Go-esque para hospedar sites Magento.


fonte
2

Você só precisa criar uma nova pasta para conter os arquivos de configuração e, em index.php, você adiciona uma variedade de opções ao Mage :: Run ().

Nessa pasta, você terá todo o mesmo conteúdo que app / etc / incluindo a pasta modules.

Primeiro domínio:

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

Segundo domínio:

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

isto dirá ao Magento onde estão os arquivos de configuração para o domínio.

slarek
fonte
1

Qual é o seu objetivo principal? Área administrativa diferente ou manipulação mais fácil do seu código-fonte?

Eu faria isso com uma mistura de diretórios e arquivos "locais" e diretórios e arquivos comuns vinculados (ln -s)

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

comum

  • aplicativo/
  • js /
  • lib /
  • ...

"local"

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

Mas pode ser um pouco confuso.

waltavista
fonte