Я видел некоторые сообщения, касающиеся этого, и сам исследовал те же сценарии для развертывания SQL.Я должен согласиться с тем, что для уровня Magento уровня предприятия должна быть встроена такая функциональность.Хорошая новость, по крайней мере в НЕКОТОРЫХ формах или моде, насколько она завершена, я не совсем уверен.Вот пример отката при исключении:
try {
$write = Mage::getSingleton('core/resource')->getConnection('core_write');
$write->beginTransaction();
// do stuff here
$write->commit();
} catch (Exception $e) {
mage::log(__METHOD__ . ':' . __LINE__ . ': Rollback happened.');
$write->rollback();
}
Теперь, если вы посмотрите на app / code / core / Mage / Core / Model / Resource / Setup.php, вы найдете немалоинтересные методы.В частности: _getModifySqlFiles
, _rollbackResourceDb
и _modifyResourceDb
.
_modifyResourceDb
являются наиболее интересными для меня, так как здесь $ actionType может также выполнять откат и удаление - также обратите внимание, что вы можете использовать PHPтакже файлы для ваших установочных файлов.
// Read resource files
$arrAvailableFiles = array();
$sqlDir = dir($sqlFilesDir);
while (false !== ($sqlFile = $sqlDir->read())) {
$matches = array();
if (preg_match('#^'.$resModel.'-'.$actionType.'-(.*)\.(sql|php)$#i', $sqlFile, $matches)) {
$arrAvailableFiles[$matches[1]] = $sqlFile;
}
}
После выполнения этого кода:
$arrModifyFiles = $this->_getModifySqlFiles($actionType, $fromVersion, $toVersion, $arrAvailableFiles);
Но здесь я предполагаю, что основные разработчики Magento потерялись в недрах ресурса EAVмодель и просто оставил ее частично завершенной.
protected function _getModifySqlFiles($actionType, $fromVersion, $toVersion, $arrFiles)
{
$arrRes = array();
switch ($actionType) {
case 'install':
case 'data-install':
...
case 'rollback':
break;
case 'uninstall':
break;
}
return $arrRes;
}
У меня не было возможности действительно проверить вышеупомянутое, но только из моих первоначальных исследований ORM, который является magento и Autoloading, а также другоговклад разработчика на его выводы, а также.
В конечном итоге было бы идеально, если бы мы могли сохранить все наши изменения как минимум в модульной системе контроля версий.Очевидно, что огромные наборы данных, которые необходимо импортировать, не должны управляться таким образом, но для этих небольших постепенных изменений я хочу перейти к промежуточному, производственному тестированию, а в случае неудачи верните его обратно на одну версию, и все вернется в нормальное состояние.
Очевидно, что нет единственного идеального решения для развертывания с таким большим количеством клиентов, имеющих разные требования и потребности, но общий способ сделать это помог бы с развертыванием кода / SQL.Это иронично, что у Enterprise есть этапы CMS и возможность модульной разработки кода, но БД не получила такой большой любви.
Есть связанный вопрос, который говорит о том, как в настоящее время мы делаем это снекоторые специализированные сценарии «домашнего производства», которые по существу делают:
Выполнение MySQLDump или резервного копирования, а затем замена BASE_URL в файле SQL.
Лучшие практики для развертывания Magento
Еще один инструмент, на который стоит обратить внимание: Phing .
Если у кого-то есть время исследовать процессы "отката" и "удаления", которые кажутся , которая будет реализована и сообщать о своих выводах, также будет полезна для меня.