モジュールのセットアップスクリプトの使用方法


22

次の<global>ように、スペース内のモジュールのetc / config.xmlファイルで宣言することにより、独自のモジュールのセットアップスクリプトを使用できます。

<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テーブルのエントリを必ず削除してください。
リックカイパーズ

読みinteresingすることができ他の回答に加えてmagentocommerce.com/images/uploads/RDBMS_Guide2.pdfをそれはコアチームからのものであり、私はそれが持っているかを知るだけでなく、良いいつもだと思う1.6で行われた変更の後ろの考えを説明します変更されたが、理由も。
セルドウェラー

回答:


21

Magento 1.6以降では、マルチRDBMSサポートが追加されたため、mysql4を使用する必要がなくなりました。

実行されていない理由を確認するには、exception.logまたはsystem.logを確認します。Magentoはセットアップクラスを見つけられない可能性があります。ただし、インストールスクリプトの作成は非常に簡単です。

Alan Stormのガイドも確認してください:http : //alanstorm.com/magento_setup_resources


11

@erfan saifとして、magentoは1.6からmulti-rdbmsをサポートしました。しかし、現実の世界では、mysqlバックエンドのみを知っています。

magentoは異なるバックエンドに対して異なるインストール/アップグレード/データスクリプトを持つことができることを理解することが重要です。標準SQLではなくmysqlでサポートされる特別なIndex-Typeが必要な場合は、mysql4-install-1.0.0.phpスクリプトを実装できます。スクリプトが汎用の場合、install-1.0.0.phpを使用します

Mage_Core_Model_Resource_Setupを見ると、2つの興味深いことがわかります。

  1. ファイルに名前を付けることができます(%s-)%s-VERSION。(php | sql)
  2. 2つのインストールスクリプトがある場合(ただし、データスクリプトを使用する場合は同じです(app / code / core / Mage / Core / Model / Resource / Setup.php:520))magentoは、汎用スクリプトよりも特殊なスクリプトを優先します(1つとして)期待します)

app / code / core / Mage / Core / Model / Resource / 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の代わりに)ロードします。デバッグの時間です。2つの標準エラーは次のとおりです。

  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を介して追加され、data- and missing mysql4-がmagento 1.6で追加されました。後方互換性が必要な場合は注意してください!


3

スクリプトが実行されていない場合は、モジュールのバージョンがセットアップスクリプトのバージョンと一致するかどうかも確認する必要があります。

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

1

スクリプトが実行されていない場合は、core_resourceのバージョン番号をリセットし、キャッシュをフラッシュします。Magentoはバージョンを事前にキャッシュします。すべてのキャッシュが有効になっている場合、セットアップスクリプトを実行することは不可能であると思われます。私たちはすべてキャッシュを無効にして作業しているため、これに気付かない場合がありますが、キャッシュが有効になっている場合、アップロードによるLiveサイトへのインストールは機能しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.