Instalasi tunggal dengan, banyak basis data

11

Apakah mungkin membuat satu instalasi, dan dari instalasi ini membuat beberapa toko dengan basis data yang berbeda?

Sesuatu seperti saya akan membuat satu instalasi di domain.1 dengan database, dan dari admin saya akan membuat situs web baru dan toko di beberapa database baru untuk domain.2 .

Saya tahu bahwa banyak toko dapat dicapai dengan satu basis data. Tetapi apakah bisa sama dengan database yang berbeda.

Mike
sumber
Bisakah Anda menjelaskan mengapa Anda membutuhkan 2 database? Apakah ini konfigurasi master / slave atau hanya ingin memiliki 2 database terpisah?
Marius
Saya hanya ingin memiliki 2 database terpisah. Saya memerlukan dua toko yang berbeda dengan satu instalasi tetapi memisahkan basis data.
Mike

Jawaban:

3

Jawaban bagus slarek. Kami melakukan sesuatu yang sangat mirip. Alih-alih mengedit index.php, kami membuat folder terpisah di luar basis kode magento, dan memasukkan mage.php dari folder itu, dan kemudian mengedit etc_dir (dan direktori lainnya) seperti pada metode Anda di atas.

struktur folder:

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

Di dalam masing-masing folder klien adalah:

  • /www/clientx/etc/local.xml (dengan basis data unik yang ditentukan, dan redis db unik)
  • / www / clientx / etc / modules (ini adalah tautan sym ke / www / magento / app / etc / modules)
  • /www/clientx/index.php

di /www/clientx/index.php

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

... (sisa index.php adalah bisnis seperti biasa) ...

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

Kami mengatur

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

Saya tidak berpikir ini mungkin di luar kotak. Magento mendukung konfigurasi database master / slave, tetapi Anda harus memilikinya untuk semua toko.
Dan saya tidak berpikir ini bisa dilakukan dengan mudah dengan pengkodean khusus karena toko disimpan dalam database.

Jadi tergantung pada tampilan toko Anda perlu tahu basis data mana yang harus disambungkan, tetapi untuk mengetahui tampilan toko, Anda perlu melakukan kueri basis data. Jadi Anda berputar-putar.

Marius
sumber
3

Anda ingin memiliki beberapa toko terpisah dengan basis datanya sendiri menggunakan basis kode tunggal?

Yah, tidak ada cara sederhana dan direkomendasikan untuk melakukan itu. Dikatakan bahwa kita dapat melihat apa yang BISA dilakukan:

Informasi basis data berasal dari satu file xml: app / etc / local.xml File ini sedang dimuat dari app / Mage.php jadi jika Anda mengubah file itu Anda secara teoritis dapat memutuskan file konfigurasi yang akan Anda muat (berdasarkan yang diinginkan kondisi, seperti nama domain). Voila, domain berbeda, database berbeda. Sekarang tiba Bagian Berita Buruk (tm).

  1. Anda menimpa kode inti dan disebut "kelas dewa" pada saat itu. Ini dianggap sebagai praktik SANGAT BURUK di dunia Magento! Setiap kali Anda meningkatkan perubahan Anda akan ditimpa.
  2. Konten tumpang tindih. Tidak semua konten Anda disimpan dalam basis data, ada juga folder media dan ada folder sesi (var / sesi) yang Anda perlukan untuk mencari solusinya (misalnya jalur khusus berdasarkan pada basis data) atau menyimpan gambar dan sesi dalam basis data (sebelum Anda bertanya: ya, ini mungkin).
  3. Cache. Anda tentu tidak ingin Anda menyimpan folder cache penyimpanan yang berbeda (var / cache). Untungnya dimungkinkan untuk menggunakan cache eksternal, seperti memcached daripada menyimpan file ke folder itu. Tetap Anda harus memastikan bahwa ID cache Anda tidak akan tumpang tindih, karena jika mereka melakukannya, Anda akan berada di dunia yang terluka.
  4. Anda tidak dapat menggunakan kompilasi (fitur ini sudah usang).
  5. Mungkin ada hal lain yang saya lupa. Siapa saja?
Segera
sumber
2

saya baru saja menemukan ekstensi ini:
https://github.com/steverobbins/Magento-Multi_Client

Magento Multi Client
Host beberapa klien pada basis kode Magento yang sama.

Setiap klien memiliki local.xml dan etc / modules.xml mereka sendiri. Ini memungkinkan Anda untuk menentukan basis data yang terpisah dan layanan caching per klien, serta mengaktifkan / menonaktifkan modul seperti yang diminta.

Setiap klien mempertahankan independensi mereka tetapi berbagi basis kode.

Ini bisa dianggap sebagai pendekatan Magento Go-esque untuk meng-hosting situs web Magento.


sumber
2

Anda hanya perlu membuat folder baru untuk memuat file konfigurasi dan di index.php Anda menambahkan array opsi ke Mage :: Run ().

Dalam folder itu Anda akan memiliki semua konten yang sama dengan app / etc / termasuk folder modules.

Domain pertama:

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

Domain kedua:

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

ini akan memberi tahu Magento di mana file konfigurasi untuk domain.

Slarek
sumber
1

Apa tujuan utama anda? Area admin berbeda atau penanganan kode sumber Anda lebih mudah?

Saya akan melakukannya dengan campuran direktori dan file "lokal" dan link (ln -s) direktori dan file umum

/ www / umum / www / shop1 / www / shop2

umum

  • aplikasi/
  • js /
  • Lib /
  • ...

"lokal"

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

Tapi bisa jadi agak membingungkan.

waltavista
sumber