拡張機能のインストールスクリプトを作成しようとしていますが、何らかの理由でインストールスクリプトが作成されません。拡張機能はcore_resourceテーブルに表示されますが、作成しようとしている属性は作成されません。
最初にexit()を配置し、サイトが正常に実行されたため、スクリプトが呼び出されていないと確信しています。
これが私の構成XMLファイルにあるものです。これは、グローバル->リソースパス内に配置されます。
<nie_setup>
<setup>
<module>Nie_Nie</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</nie_setup>
私のインストールスクリプトは次のとおりです。
$installer = $this;
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$installer->startSetup();
$setup->addAttribute('customer', 'nie_admin', array(
'input' => 'text',
'type' => 'text',
'backend' => '',
'visible' => 0,
'required' => 0,
'user_defined' => 1,
));
$installer->endSetup();
スクリプトが実行されない理由となる、ここで見逃している明らかなものはありますか?
この記事 を順を追って、セットアップリソースが何をするのか、どのように機能するのか、どのようにトラブルシューティングを行うのかについて誤解がないようにしてください。
一度これを行うと、この質問スレッドで言ったことすべてから、リソースが「インストール」されたように聞こえますが、インストールスクリプトは実行されません。私の推測では、あなたが使用したバージョン番号
//0.0.1 is your version number
mysql4-install-0.0.1.php
モジュールのバージョンと一致しませんでした
<modules>
<Nie_Nie>
<version>?.?.?</version>
</Nie_Nie>
</modules>
スクリプトを実行するには、これらが一致する必要があります。 IthinkMagentoは以前のバージョンが見つかった場合にそれを実行できるほどスマートですが、セットアップリソースのコードは従うのが難しい種類なので、必ず一致するようにしてください。
いずれにせよ、セットアップリソースの実行時にmagentoが実行しようとしているファイルを確認する方法は次のとおりです。モジュールに関連するcore_resource
からエントリを削除します。キャッシュをクリアします。次に、セットアップクラスで次の場所を見つけます。
app/code/core/Mage/Core/Model/Resource/Setup.php:
protected function _modifyResourceDb($actionType, $fromVersion, $toVersion)
{
...
$sqlFilesDir = Mage::getModuleDir('sql', $modName).DS.$this->_resourceName;
if (!is_dir($sqlFilesDir) || !is_readable($sqlFilesDir)) {
return false;
}
...
$sqlDir->close();
if (empty($arrAvailableFiles)) {
return false;
}
...
$arrModifyFiles = $this->_getModifySqlFiles($actionType, $fromVersion, $toVersion, $arrAvailableFiles);
if (empty($arrModifyFiles)) {
return false;
}
そして、それらを変更して、一時的なデバッグ例外を追加します
if (!is_dir($sqlFilesDir) || !is_readable($sqlFilesDir)) {
throw new Exception("$sqlFilesDir not found");
return false;
}
...
if (empty($arrAvailableFiles)) {
throw new Exception("No files found to run");
return false;
}
...
$arrModifyFiles = $this->_getModifySqlFiles($actionType, $fromVersion, $toVersion, $arrAvailableFiles);
if (empty($arrModifyFiles)) {
throw new Exception("No valid upgrade files found to run for ");
return false;
}
throw new Exception("If you're getting here, we have a file. Remove your exceptions here and place one in your installer to make sure it's the one you think it is.");
ページをリロードすると、Magentoが見つけられないものについて文句を言う例外テキストが表示されます。これで、Magentoが実行しようとしているインストーラースクリプトを見つけることができますが、見つけることができません。 core_resource
でモジュールの行を削除し、キャッシュをクリアすることを忘れないでください。 (マゼンタは、インストール/アップグレードを確認する必要があるモジュールをキャッシュします)
それでもうまくいかない場合は、applyAllDataUpdates
のロジックを掘り下げて、クラスにインストーラーファイルが含まれていない理由を見つけてください。
このエラーを追跡する最も簡単で最も有益な方法は、 setup IDE Magentoをデバッグするために を設定し、mysql4-install-0.0.1.php
にブレークポイントを設定することです。ヒットしない場合は、XML構成に問題があるかどうかがわかりますブレークポイントがヒットする場合は、コードをトレースしてエラーの原因を見つけることができます。
設定に半日かかる場合がありますが、Magentoのライブデバッグは、コードを学習および理解するための最良の方法です。あなた自身を支持して、今投資をしてください。
この問題が発生したとき、実際にキャッシュを無効にする必要がありました。単にそれをフラッシュしても、何らかの理由で助けにはなりませんでした。
Magento Knowledgebase に従って、<class>
タグの<setup>
。このようにして、正しいセットアップモデルが使用されていることを確認し、(それまでになった場合)モデルをインストールスクリプトに渡して、$setup
手動で。
インストールスクリプトのファイルパーミッションとそれが入っているディレクトリを確認してください。時々、core_resources
は、プロセスを開始するのにも役立ちます。
Magentoで、モジュールがロードされているかどうか、およびそのモジュールのどのバージョンがロードされているかを確認できます。
app/code/core/Mage/Core/Model/Resource/Setup.php
_に移動します__construct()
に移動します関数の最後に次を記述します。
Mage::log($modName); Mage::log($this->_moduleConfig);
バージョン番号がロードされているすべてのモジュールがログに記録されます。ここで、モジュールがロードされているかどうかを確認できます。
更新スクリプトを実行するには、モジュールのバージョンを1ポイント上に変更する必要があります。
<modules>
<Nie_Nie>
<version>1.5.0.0</version>
</Nie_Nie>
</modules>
このバージョンがcore_resources
テーブルのリソースバージョンと等しい場合、アップグレードスクリプトは実行されません。また、バージョンはアップグレードスクリプトの名前と一致する必要があります
ストアにも同じ問題がありました http://www.looxis.de 使用している拡張子を更新するために、すべてのファイルをFTP経由で転送しましたが、データベースはクリア後に更新されませんでしたキャッシュ。そのため、更新された拡張機能の実行に失敗し、バックエンドにログインできませんでした。
ソリューションを検索すると、このページが見つかりました。
問題は、数週間前に新しいバージョンのモジュールをインストールし、他のモジュールとの競合によりエラーが発生したため、一部のテーブルをデータベースバックアップから部分的に転送し、古いファイルも戻すことでした。すべてが再び機能しました
他の拡張機能と互換性のある(競合が削除された)モジュールを新たに更新しようとしたときに、SQL更新スクリプトは実行されませんでした。
これは、テーブル「core_resources」が原因でした。そこでは、モジュールのバージョン番号は数週間前にインストールした最新バージョンに設定されていました。そのため、magentoは新しい更新が再度実行されたことを認識せず、最新バージョンが既に存在すると想定していました。
手動でバージョン番号を低いバージョンに変更し、ブーム、アップグレードスクリプトが開始され、すべて正常に動作しました!
App/etc/modulesファイルを確認し、モジュールの名前が正確であり、コードプールが正確に指定されていることを確認してください。