วิธีใช้สคริปต์การตั้งค่าสำหรับโมดูลของคุณ


22

ฉันรู้ว่าคุณสามารถใช้สคริปต์การติดตั้งสำหรับโมดูลของคุณเองโดยการประกาศในไฟล์ etc / config.xml ของโมดูลของคุณภายใน<global>พื้นที่ดังนี้:

<resources>
    <catalog_setup>
        <setup>
            <module>Mage_Catalog</module>
            <class>Mage_Catalog_Model_Resource_Setup</class>
        </setup>
    </catalog_setup>
</resources>

บางโมดูลแล้วใช้ไฟล์ในขณะที่คนอื่นใช้mysql4-install-0.0.1.php install-0.0.1.phpดังนั้นฉันจะใช้ mysql4 หน้าชื่อไฟล์และเมื่อใดที่ฉันจะไม่ใช้

นอกจากนี้ฉันควรทำอย่างไรเมื่อสคริปต์การตั้งค่าของฉันไม่ทำงานเพื่อหาสาเหตุที่ไม่


1
ตรวจสอบให้แน่ใจว่าคุณลบรายการของคุณในตาราง core_resource เพื่อให้การตั้งค่าของคุณทำงานอีกครั้ง
ริก Kuipers

นอกจากคำตอบอื่น ๆ แล้วมันอาจเป็นการอ่านเพื่ออ่านmagentocommerce.com/images/uploads/RDBMS_Guide2.pdfมันมาจากทีมหลักและอธิบายความคิดที่อยู่เบื้องหลังการเปลี่ยนแปลงที่เกิดขึ้นกับ 1.6 ฉันคิดว่ามันดีเสมอที่ไม่ได้รู้ว่ามีอะไรบ้าง การเปลี่ยนแปลง แต่ยังทำไม
Celldweller

คำตอบ:


21

ตั้งแต่ Magento 1.6 ขึ้นไปคุณไม่จำเป็นต้องใช้ mysql4 อีกต่อไปเนื่องจากมีการรองรับหลาย RDBMS เพิ่มเติม

หากต้องการทราบสาเหตุที่ไม่สามารถใช้งานได้คุณสามารถตรวจสอบ exception.log หรือ system.log บางที Magento อาจไม่พบคลาสการตั้งค่าของคุณ การสร้างสคริปต์การติดตั้งนั้นค่อนข้างตรงไปตรงมา

ตรวจสอบคู่มือของ Alan Storm: http://alanstorm.com/magento_setup_resources


11

ในฐานะ @erfan saif วีโอไอพีได้รับการสนับสนุนหลาย rdbms ตั้งแต่ 1.6 แต่ในโลกแห่งความเป็นจริงฉันรู้เพียงแบ็กเอนด์ mysql

สิ่งสำคัญคือต้องเข้าใจว่าวีโอไอพีสามารถมีสคริปต์การติดตั้ง / อัปเกรด / ข้อมูลที่ต่างกันสำหรับแบ็กเอนด์ที่ต่าง หากคุณต้องการดัชนีชนิดพิเศษซึ่งสนับสนุนโดย mysql แต่ไม่ใช่โดย SQL มาตรฐานคุณสามารถใช้สคริปต์ mysql4-install-1.0.0.php หากสคริปต์ของคุณเป็นแบบทั่วไปให้ใช้ install-1.0.0.php

หากคุณดูที่ Mage_Core_Model_Resource_Setup ฉันสามารถค้นหาสิ่งที่ขัดขวางสองสิ่ง:

  1. คุณสามารถตั้งชื่อไฟล์ของคุณ (% s -)% s-VERSION (php | sql)
  2. หากคุณมีสองสคริปต์ติดตั้ง (แต่มีสคริปต์ข้อมูลมันจะเหมือนกัน (app / code / core / Mage / Core / รุ่น / ทรัพยากร / Setup.php: 520)) magento ชอบสคริปต์พิเศษมากกว่าสคริปต์ทั่วไป (เป็นหนึ่ง จะคาดหวัง)

app / รหัส / core / Mage / หลัก / รุ่น / ทรัพยากร / setup.php: 488

$regExpDb   = sprintf('#^%s-(.*)\.(php|sql)$#i', $actionType);
$regExpType = sprintf('#^%s-%s-(.*)\.(php|sql)$#i', $resModel, $actionType);

while (false !== ($file = $handlerDir->read())) {
    $matches = array();
    if (preg_match($regExpDb, $file, $matches)) {
        $dbFiles[$matches[1]] = $filesDir . DS . $file;
    } else if (preg_match($regExpType, $file, $matches)) {
        $typeFiles[$matches[1]] = $filesDir . DS . $file;
    }
}
[...]
foreach ($typeFiles as $version => $file) {
    $dbFiles[$version] = $file;
}

ระวังถ้าคุณตั้งชื่อสคริปต์ของคุณ.sqlมันจะถูกเรียกใช้โดยตรงในฐานข้อมูล:

// app/code/core/Mage/Core/Model/Resource/Setup.php:621
switch ($fileType) {
    case 'php':
        $conn   = $this->getConnection();
        $result = include $fileName;
        break;
    case 'sql':
        $sql = file_get_contents($fileName);
        if (!empty($sql)) {

            $result = $this->run($sql);

นอกจากนี้ฉันควรทำอย่างไรเมื่อสคริปต์การตั้งค่าของฉันไม่ทำงานเพื่อหาสาเหตุที่ไม่

ฉันชอบ die ('sadf') ที่จุดเริ่มต้นของไฟล์ติดตั้ง / อัปเกรดของฉันเพราะฉันสามารถเรียกใช้ได้หลายครั้งหากมีการเรียกใช้ดังนั้นฉันสามารถตรวจสอบได้ว่าตัวแปรทั้งหมดที่ฉันตั้งไว้นั้นถูกต้องหรือไม่ ฐานข้อมูล หากฉันเห็น 'sadf' บนหน้าจอฉันรู้ว่าสคริปต์กำลังทำงาน

ฉันโหลดวีโอไอพี (แทน sadf) ถึงเวลาที่จะทำการดีบักข้อผิดพลาดมาตรฐานสองข้อของฉันคือ:

  1. ฉันลืมเพิ่มสคริปต์ลงในการกำหนดค่า
  2. ฉันsql/ลืมไดเรกทอรีเช่นsql/install-1.0.0.phpแทนที่จะเป็นsql/my_module_setup/install-1.0.0.php

และเพราะฉันคิดว่ามันเหมาะกับที่นี่โปรดระวังชื่อตัวแปรของคุณ: http://blog.fabian-blechschmidt.de/articles/file-kills-setup-script.html

อัปเดต @ rouven-rieker เพิ่มผ่านทาง Twitter ว่าข้อมูล - และ mysql4- หายไปถูกเพิ่มใน magento 1.6 หากคุณต้องการความเข้ากันได้ย้อนหลังระวัง!


3

หากสคริปต์ของคุณไม่ทำงานคุณควรตรวจสอบว่ารุ่นโมดูลของคุณตรงกับรุ่นของสคริปต์การตั้งค่าของคุณหรือไม่

<modules>
    <Your_Module>
        <version>0.0.1</version>
    </Your_Module>
</modules> 

1

หากสคริปต์ของคุณไม่ทำงานให้รีเซ็ตหมายเลขรุ่นใน core_resource และล้างแคช ดูเหมือนเวอร์ชั่นแคชวีโอไอพีล่วงหน้าและดูเหมือนว่าจะพลาดที่จะเรียกใช้สคริปต์การตั้งค่าเมื่อเปิดใช้งานแคชทั้งหมด เนื่องจากเราทุกคนทำงานกับแคชที่ปิดใช้งานเราอาจไม่สังเกตเห็นสิ่งนี้ แต่การติดตั้งบนไซต์ Live ผ่านการอัปโหลดจะไม่ทำงานหากเปิดใช้งานแคช

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