ติดตั้งเดียวกับหลายฐานข้อมูล


11

เป็นไปได้หรือไม่ที่จะทำการติดตั้งเดียวและจากการติดตั้งนี้เพื่อสร้างร้านค้าหลายแห่งที่มีฐานข้อมูลต่างกัน

บางอย่างเช่นฉันจะทำการติดตั้งหนึ่งครั้งบนdomain.1พร้อมฐานข้อมูลและจากผู้ดูแลระบบฉันจะสร้างเว็บไซต์ใหม่และร้านค้าในฐานข้อมูลใหม่สำหรับโดเมน 2

ฉันรู้ว่าหลายร้านสามารถทำได้ด้วยฐานข้อมูลเดียว แต่มันสามารถเหมือนกันกับฐานข้อมูลที่แตกต่างกัน


คุณช่วยอธิบายได้ไหมว่าทำไมคุณถึงต้องการฐานข้อมูล 2 ตัว มันคือการกำหนดค่าหลัก / ทาสหรือเพียงแค่ต้องการมี 2 ฐานข้อมูลแยกต่างหาก
Marius

ฉันต้องการมี 2 ฐานข้อมูลแยกต่างหาก ฉันต้องการร้านค้าสองแห่งที่มีการติดตั้งเดียว แต่มีฐานข้อมูลแยกต่างหาก
Mike

คำตอบ:


3

คำตอบที่ดีเยี่ยม เราทำสิ่งที่คล้ายกันมาก แทนที่จะแก้ไข index.php เราตั้งค่าโฟลเดอร์แยกต่างหากนอก codebase ของ magento และรวม mage.php จากโฟลเดอร์เหล่านั้นแล้วแก้ไข etc_dir (และ dirs อื่น ๆ ) เช่นเดียวกับวิธีการของคุณด้านบน

โครงสร้างโฟลเดอร์:

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

ภายในแต่ละโฟลเดอร์ไคลเอนต์คือ:

  • /www/clientx/etc/local.xml (พร้อมการกำหนดฐานข้อมูลเฉพาะและ redis ที่ไม่ซ้ำกัน)
  • / www / clientx / etc / modules (นี่คือลิงค์ sym ไปยัง / www / magento / app / etc / modules)
  • /www/clientx/index.php

ใน /www/clientx/index.php

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

... (ส่วนที่เหลือของ index.php เป็นธุรกิจตามปกติ) ...

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

เราตั้ง

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

5

ฉันไม่คิดว่ามันเป็นไปได้นอกกรอบ Magento รองรับการกำหนดค่าฐานข้อมูล master / slave แต่คุณต้องมีในทุกร้านค้า
และฉันไม่คิดว่าจะสามารถทำได้อย่างง่ายดายด้วยการกำหนดรหัสเองเนื่องจากร้านค้าจะถูกเก็บไว้ในฐานข้อมูล

ดังนั้นขึ้นอยู่กับมุมมองร้านค้าที่คุณต้องรู้ว่าฐานข้อมูลที่จะเชื่อมต่อ แต่เพื่อที่จะรู้ว่ามุมมองร้านค้าคุณต้องสอบถามฐานข้อมูล คุณวิ่งวนเป็นวงกลม


3

คุณต้องการที่จะมีร้านค้าแยกต่างหากหลายแห่งที่มีฐานข้อมูลของตัวเองโดยใช้รหัสฐานเดียว?

ไม่มีวิธีที่ง่ายและแนะนำให้ทำเช่นนั้น ที่ถูกกล่าวว่าเราสามารถเห็นสิ่งที่สามารถทำได้:

ข้อมูลฐานข้อมูลมาจากไฟล์ xml ไฟล์เดียว: app / etc / local.xml ไฟล์นี้กำลังโหลดจาก app / Mage.php ดังนั้นหากคุณเปลี่ยนไฟล์นั้นคุณสามารถตัดสินใจได้ว่าจะโหลดไฟล์การกำหนดค่าแบบใดตามหลักวิชา เงื่อนไขเช่นชื่อโดเมน) Voila โดเมนที่แตกต่างฐานข้อมูลที่แตกต่างกัน ตอนนี้ส่วนข่าวร้าย (tm) มาแล้ว

  1. คุณเขียนทับรหัสแกนและเรียกว่า "god class" ในตอนนั้น นี่ถือว่าเป็นการฝึกฝนที่ดีมากในโลกวีโอไอพี! ทุกครั้งที่คุณอัปเกรดการเปลี่ยนแปลงจะถูกเขียนทับ
  2. เนื้อหาทับซ้อนกัน เนื้อหาของคุณไม่ได้ถูกเก็บไว้ในฐานข้อมูล แต่ก็มีโฟลเดอร์สื่อและมีโฟลเดอร์เซสชัน (var / session) ที่คุณต้องการค้นหาวิธีแก้ปัญหา (เช่นเส้นทางที่กำหนดเองตามฐานข้อมูล) หรือเก็บทั้งรูปภาพและเซสชันในฐานข้อมูล (ก่อน คุณถาม: ใช่นี่เป็นไปได้)
  3. ขุมทรัพย์ แน่นอนที่สุดคุณไม่ต้องการให้ร้านค้าอื่นแชร์โฟลเดอร์แคช (var / cache) โชคดีที่เป็นไปได้ที่จะใช้แคชภายนอกเช่น memcached แทนที่จะเก็บไฟล์ไว้ในโฟลเดอร์นั้น คุณยังต้องแน่ใจว่า ID แคชของคุณจะไม่ทับซ้อนกันเพราะถ้าเป็นเช่นนั้นคุณจะต้องอยู่ในโลกที่เจ็บปวด
  4. คุณไม่สามารถใช้การรวบรวมได้ (คุณลักษณะนี้ถูกคัดค้านอยู่แล้ว)
  5. บางทีอย่างอื่นฉันลืม ใคร?

2

ฉันเพิ่งพบส่วนขยายนี้:
https://github.com/steverobbins/Magento-Multi_Client

Magento Multi Client
โฮสต์ไคลเอนต์หลายรายบนฐานรหัส Magento เดียวกัน

ลูกค้าแต่ละรายมี local.xml และ etc / modules.xml ของตัวเอง สิ่งนี้ช่วยให้คุณสามารถระบุฐานข้อมูลแยกต่างหากและบริการแคชต่อไคลเอนต์รวมถึงเปิด / ปิดการใช้งานโมดูลตามที่ร้องขอ

ลูกค้าแต่ละรายยังคงความเป็นอิสระ แต่ใช้รหัสร่วมกัน

นี่ถือได้ว่าเป็นวิธีการเยี่ยมชมเว็บไซต์วีโอไอพีของวีโอไอพี


2

คุณเพียงแค่ต้องสร้างโฟลเดอร์ใหม่เพื่อให้มีไฟล์การกำหนดค่าและใน index.php คุณเพิ่มอาร์เรย์ของตัวเลือกใน Mage :: Run ()

ในโฟลเดอร์นั้นคุณจะมีเนื้อหาเหมือนกับแอพ / etc / รวมถึงโฟลเดอร์ modules

โดเมนแรก:

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

โดเมนที่สอง:

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

สิ่งนี้จะบอก Magento ว่าไฟล์กำหนดค่าสำหรับโดเมนอยู่ที่ไหน


1

เป้าหมายหลักของคุณคืออะไร พื้นที่การดูแลที่แตกต่างกันหรือการจัดการซอร์สโค้ดของคุณง่ายขึ้น?

ฉันจะทำกับการรวมกันของไดเรกทอรี "ท้องถิ่น" และไฟล์และเชื่อมโยง (ln -s) ไดเรกทอรีและไฟล์ทั่วไป

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

ร่วมกัน

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

"ท้องถิ่น"

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

แต่อาจทำให้สับสนเล็กน้อย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.