Это правда? Я думал, что sql-операторы для обновлений базы данных будут обернуты в транзакции, поэтому их можно откатить, если что-то пойдет не так.
Ваши инженерные инстинкты здоровы, но то, что происходит в реальном мире программирования стартапов для бизнеса, более сложно / безобразно.
Система ресурсов установки Magento не включает отдельные сценарии в транзакцию. Для этого есть множество причин, но я всегда предполагал, что основной причиной является то, что Magento начал свою жизнь явно с MySQL, и многие / большинство операторов определения данных ( ALTER TABLE
и т. Д.) В MySQL вызывают неявную фиксацию .
Хотя вы найдете индивидуальные настройки ресурса, иногда используйте транзакции.
#File: app/code/core/Mage/Sales/sql/sales_setup/mysql4-upgrade-1.3.99-1.4.0.0.php
$installer->getConnection()->beginTransaction();
$installer->run("
UPDATE {$installer->getTable('sales_flat_order')} AS o, {$installer->getTable('sales_order_entity_varchar')} AS od
//...
Сама система просто запускает сценарии и надеется на лучшее.
Если вы заинтересованы в коде, который запускает эти ресурсы, лучшее место для начала, вероятно, здесь
#File: app/code/core/Mage/Core/Model/Resource/Setup.php
protected function _modifyResourceDb($actionType, $fromVersion, $toVersion)
{
//...
}
_modifyResourceDb
Метод является тот , который включает в себя фактические сценарии установки ресурсов
#File: app/code/core/Mage/Core/Model/Resource/Setup.php
case 'php':
$conn = $this->getConnection();
$result = include $fileName;
break;
case 'sql':
$sql = file_get_contents($fileName);
if (!empty($sql)) {
$result = $this->run($sql);
} else {
$result = true;
}
break;
Очень хакерским решением вашей проблемы было бы временное переопределение core-hack / code-pool-override, которое было явно завершено после 5-10 включений, и повторите его. Это уменьшило бы вероятность того, что сценарий установки установится на полпути.
Лучшим решением, и одним из моих личных проектов «возможно, один день», был бы пользовательский скрипт, который использовал основные методы Magento для проверки обновлений, которые необходимо применить, перечисления их и предоставления пользователям возможности просматривать их один за другим.