Làm thế nào để sử dụng tập lệnh thiết lập cho mô-đun của bạn?


22

Tôi nhận ra rằng, bạn có thể sử dụng các tập lệnh thiết lập cho mô-đun của riêng mình bằng cách khai báo chúng trong tệp etc / config.xml của mô-đun của bạn trong <global>không gian như thế này:

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

Một số mô-đun sau đó sử dụng tệp mysql4-install-0.0.1.phptrong khi những mô-đun khác sử dụng install-0.0.1.php. Vì vậy, khi nào tôi sử dụng mysql4 trước tên tệp và khi nào tôi không sử dụng nó?

Ngoài ra, tôi có thể làm gì khi tập lệnh thiết lập của tôi không chạy để tìm hiểu tại sao nó không hoạt động?


1
Đảm bảo bạn xóa mục nhập của mình trong bảng core_resource để thiết lập của bạn chạy lại.
Rick Kuipers

Ngoài các câu trả lời khác, có thể xen kẽ để đọc magentoc Commerce.com/images/uploads/RDBMS_Guide2.pdf Đó là từ Nhóm cốt lõi và mô tả những suy nghĩ đằng sau những thay đổi được thực hiện với 1.6 Tôi nghĩ rằng không chỉ luôn biết những gì đã có Thay đổi nhưng cũng vì sao.
Celldweller

Câu trả lời:


21

Từ Magento 1.6 trở lên, bạn không cần phải sử dụng mysql4 nữa vì đã hỗ trợ thêm nhiều RDBMS.

Để tìm hiểu lý do tại sao nó không chạy, bạn có thể kiểm tra ngoại lệ.log hoặc system.log, có thể Magento không tìm thấy lớp thiết lập của bạn. Tạo một kịch bản cài đặt là khá đơn giản mặc dù.

Đồng thời kiểm tra hướng dẫn của Alan Storm: http://alanstorm.com/magento_setup_resource


11

Như @erfan saif, magento có hỗ trợ đa rdbms kể từ 1.6. Nhưng trong thế giới thực, tôi chỉ biết phụ trợ mysql.

Điều quan trọng là phải hiểu, magento có thể có các tập lệnh cài đặt / nâng cấp / dữ liệu khác nhau cho các phụ trợ khác nhau. Nếu bạn muốn một Loại chỉ mục đặc biệt được hỗ trợ bởi mysql nhưng không phải bằng SQL tiêu chuẩn, bạn có thể triển khai tập lệnh mysql4-install-1.0.0.php. Nếu tập lệnh của bạn là chung chung, hãy sử dụng install-1.0.0.php

Nếu bạn xem Mage_Core_Model_Resource_Setup, tôi có thể tìm thấy hai thứ xen kẽ:

  1. Bạn có thể đặt tên cho tệp của mình (% s -)% s-VERSION. (Php | sql)
  2. Nếu bạn có hai tập lệnh cài đặt (nhưng với tập lệnh dữ liệu, thì nó sẽ giống nhau (app / code / core / Mage / Core / Model / Resource / Setup.php: 520)) magento thích tập lệnh chuyên biệt hơn tập lệnh chung (như một mong chờ)

ứng dụng / mã / lõi / Pháp sư / Lõi / Mô hình / Tài nguyên / Cài đặt.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;
}

Hãy cẩn thận, nếu bạn đặt tên cho tập lệnh của mình, .sqlnó được gọi trực tiếp vào cơ sở dữ liệu:

// 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);

Ngoài ra, tôi có thể làm gì khi tập lệnh thiết lập của tôi không chạy để tìm hiểu tại sao nó không hoạt động?

Tôi thích die ('sadf') khi bắt đầu tập tin cài đặt / nâng cấp của mình, vì tôi có thể chạy nó nhiều lần nếu nó được gọi, vì vậy tôi có thể kiểm tra, tất cả các biến tôi đặt đều đúng, trước khi mọi thứ được thay đổi kho dữ liệu. Nếu tôi thấy 'sadf' trên màn hình, tôi biết, kịch bản đang chạy.

Tôi tải magento (thay vì sadf), đã đến lúc gỡ lỗi, hai lỗi tiêu chuẩn của tôi là:

  1. Tôi đã tha thứ để thêm tập lệnh vào cấu hình
  2. Tôi có thư mục sql/bị lãng quên, ví dụ sql/install-1.0.0.phpthay vìsql/my_module_setup/install-1.0.0.php

Và bởi vì tôi nghĩ rằng nó phù hợp ở đây, hãy cẩn thận với tên biến của bạn: http://blog.fabian-blechschmidt.de/articles/file-kills-setup-script.html

CẬP NHẬT @ rouven-rieker đã thêm thông qua twitter rằng dữ liệu- và thiếu mysql4- đã được thêm vào trong magento 1.6. Nếu bạn cần tương thích ngược hãy cẩn thận!


3

Nếu tập lệnh của bạn không chạy, bạn cũng nên kiểm tra xem phiên bản mô-đun của mình có khớp với phiên bản của tập lệnh thiết lập không.

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

1

Nếu tập lệnh của bạn không chạy, hãy đặt lại số phiên bản trong core_resource và xóa bộ đệm. Có vẻ như Magento đã lưu trữ các phiên bản trước và bỏ lỡ các tập lệnh thiết lập khi tất cả các bộ đệm được bật. Vì tất cả chúng ta đều làm việc với bộ đệm bị vô hiệu hóa, chúng tôi có thể không nhận thấy điều này, nhưng cài đặt trên trang Live qua tải lên sẽ không hoạt động nếu bật bộ đệm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.