Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

My Magento Extension Install Script Will Not Run

I am trying to create an install script for my extension and for some reason it will not the install script. The extension will show up in the core_resource table, but the attributes I am trying to create will not create.

I am pretty sure that the script is not even being called because I put an exit() at the beginning and the site ran just fine.

Here is what I have in my config XML file. This is placed inside global -> resources path:

<nie_setup>     <setup>         <module>Nie_Nie</module>     </setup>     <connection>         <use>core_setup</use>     </connection> </nie_setup> 

My install script is as follows:

$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(); 

Is there something obvious I am missing here that would be the reason the script will not run?

like image 837
Josh Pennington Avatar asked Jan 17 '11 20:01

Josh Pennington


2 Answers

Work your way through this article to make sure you don't have any misunderstanding of what the setup resources do, how they work, and how you can troubleshoot them.

Once you've done that, from everything you've said on this question thread it sounds like you're getting your resource "installed", but that your install script never runs. My guess is that the version number you used in

//0.0.1 is your version number mysql4-install-0.0.1.php 

didn't match up with the version of your module

<modules>     <Nie_Nie>         <version>?.?.?</version>     </Nie_Nie> </modules> 

Those should match for the script to run. I think Magento is smart enough to run previous versions if it finds them, but the code in the setup resources is the kind that's hard to follow, so I always make sure they match.

Regardless, here's how you can see which file(s) magento is trying to run when it runs your setup resource. Delete any entries from core_resource related to your module. Clear your cache. Then find the following locations in the setup class

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;     } 

and then modify them to add some temporary debugging exceptions

    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."); 

Reload the page and you'll get exception text complaining about whatever Magento can't find. That should be enough to help you track down which installer script Magento is trying to run, but failing to find. Just remember to delete your module's row in core_resource and to clear your cache. (Magento caches which modules need to check for an install/upgrade)

If that doesn't work, start digging into the logic of applyAllDataUpdates and figure out why the class isn't including your installer file.

like image 51
Alan Storm Avatar answered Sep 27 '22 21:09

Alan Storm


When I encountered this problem I acually had to disable the cache. Merely flushing it did not help for whatever reason.

like image 28
Björn Tantau Avatar answered Sep 27 '22 20:09

Björn Tantau