magento: синхронизация базы данных между производством, подготовкой и разработкой
Я читал сегодня о синхронизации базы данных в Magento.
В настоящее время я борюсь с тем, что нужно синхронизировать во время разработки и загрузки в производство. Теперь, предполагая, что пакет изменений будет состоять из изменений как в БД, так и в коде, ниже будет мое понимание рабочего процесса модели (в настоящее время я не использую сервер ' stage ', так что это обойдено в этом примере):
- Синхронизировать базу данных разработчика из производственной базы данных
- Оформить рабочую копию кода на машину разработчика
- Внесите изменения и протестируйте их на сервере разработки
- Принять изменения и отправить их в хранилище SVN
- Коснитесь флажка Maintenance.flag на рабочем сервере и подготовьтесь к обновлениям (это полностью устраняет проблемы с синхронизацией у пользователей, взаимодействующих с оперативными данными, которые скоро изменятся?)
- Слияние веток с транком и развертывание репозитория на рабочем сервере
- Синхронизация dev DB с производственной базой данных и тестирование изменений
Итак, пункты № 1 и 7, которые я не совсем понимаю при работе с Magento:
- Что нужно синхронизировать, а что нет?
- Мне кажется смешным синхронизировать заказ и информацию о клиенте, поэтому я бы этого не делал.
- Я хотел бы, чтобы схема продукта и данные синхронизировались, хотя очевидно, и любые изменения администратора, изменения модуля и т. Д. Как справиться с этим?
- Как насчет того, как синхронизировать? (Дампы MySql, импорт / экспорт и т. Д.)
- В настоящее время я использую Navicat 10 Premium, который имеет структуру и функции синхронизации данных (я еще не экспериментировал, но они выглядят как огромная помощь)
Так что мне здесь не обязательно нужна конкретика (но они могут помочь). Более или менее я хочу знать, что работает для вас и насколько вы счастливы с этой системой.
2 ответа
Я использую phpunit для создания базы данных разработчиков. Я написал короткий сценарий, который выгружает данные XML из действующей базы данных, и использовал их по таблицам, разбрасывая все что угодно и удаляя ненужные мне данные. Схема для моей базы данных dev никогда не меняется и никогда не перестраивается. Только данные удаляются и воссоздаются при каждом запуске phpunit.
Может быть, это не правильное решение для всех, потому что это никогда не будет хорошо для синхронизации dev до стадии / производства, но мне не нужно это делать.
Основным преимуществом является то, как мало данных мне нужно для разработки базы данных. Это около 12000 строк XML и обрабатывает около 30 различных таблиц. Некоторые основные таблицы сохраняются, поскольку я не пишу в них, и многие таблицы пусты, потому что я ими не пользуюсь.
База данных является репрезентативной выборкой и очень мала. Достаточно маленький, чтобы редактировать его как текстовый файл, и только несколько секунд для заполнения каждый раз, когда я запускаю тесты
Вот как это выглядит вверху каждого теста PHPUnit. Там хорошая документация для PHPUnit и DbUnit
<?php
require_once dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'top.php';
require_once "PHPUnit/Extensions/Database/TestCase.php";
class SomeTest extends PHPUnit_Extensions_Database_TestCase
{
/**
* @return PHPUnit_Extensions_Database_DB_IDatabaseConnection
*/
public function getConnection() {
$database = MY_DB
$hostname = MY_HOST
$user = MY_USER
$password = MY_PASS
$pdo = new PDO("mysql:host=$hostname;dbname=$database", $user, $password);
return $this->createDefaultDBConnection($pdo, $database);
}
/**
* @return PHPUnit_Extensions_Database_DataSet_IDataSet
*/
public function getDataSet() {
return $this->createXMLDataSet(dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'Tests/_files/seed.xml');
}
}
Итак, теперь вам просто нужен начальный файл, из которого DbUnit считывает данные для повторного заполнения базы данных каждый раз, когда запускаются модульные тесты.
Начните с копирования вашей полной базы данных дважды. Одна из них будет вашей базой данных для разработчиков, а вторая - вашей "нетронутой" базой данных, которую вы можете использовать для выгрузки данных XML в случае возникновения ключевых проблем.
Затем используйте что-то вроде моего xml dumper в базе данных "prisine", чтобы получить свои xml-дампы и начать сборку исходного файла.
generate_flat_xml.php -tcatalog_product_entity -centity_id,entity_type_id,attribute_set_id,type_id,sku,has_options,required_options -oentity_id >> my_seed_file.xml
Отредактируйте начальный файл, чтобы использовать только то, что вам нужно. Небольшой размер базы данных dev означает, что вы можете исследовать различия, просто посмотрев на вашу базу данных в сравнении с тем, что находится в текстовых файлах Не говоря уже о том, что намного быстрее, когда меньше данных.
Если вы используете версию CE, то:
- рвут свн и используют GIT:)
Никогда не синхронизируйте базу данных, подготовьте обновления базы данных как файлы расширения расширений
- есть 3 сайта разработчиков, сцена, в прямом эфире
- живая база данных копируется на сцену и разрабатывается при необходимости
- Внесите все изменения в админку и просто скопируйте всю базу данных
таким образом, вам никогда не придется синхронизировать базу данных + если вы вносите все изменения в конфигурацию с помощью сценариев обновления расширений, вы можете выполнить холодную загрузку вашего magento к новой структуре базы данных в любом месте без потери структуры данных