magento: синхронизация базы данных между производством, подготовкой и разработкой - PullRequest
4 голосов
/ 28 января 2012

Сегодня я читал о синхронизации баз данных в Magento.

Одна вещь, с которой я сейчас борюсь, это то, что нужно синхронизировать во время разработки и при загрузке в производство.Теперь, если предположить, что пакет изменений будет состоять из изменений как в БД, так и в коде, ниже будет мое понимание рабочего процесса модели (в настоящее время я не использую сервер ' stage ', так что обойден в этомпример):

  1. Синхронизация dev DB из production DB
  2. Извлечение рабочей копии кода на машину dev
  3. Внесите изменения и протестируйте их на dev сервере
  4. Примите изменения и зафиксируйте их в хранилище svn
  5. Коснитесь Maintenance.flag на рабочем сервере и подготовьтесь к обновлениям (этополностью устраняет проблемы с синхронизацией пользователей, взаимодействующих с оперативными данными, которые скоро изменятся, верно?)
  6. Объединение ветвей в магистральную линию и развертывание хранилища на рабочем сервере
  7. Синхронизация dev БД обратно к производство БД и тестовые изменения

Так что пункты 1 и 7 мне не совсем понятны при работе с Magento:

  • Что нужно синхронизировать и чтонет?
    • Мне кажется смешным синхронизировать заказ и информацию о клиенте, поэтому я бы этого не делал.
    • Хотелось бы, чтобы схема продукта и данные синхронизировались, хотя, разумеется, и любые изменения администратора, изменения модуля,и т. д. Как справиться с этим?
  • А как насчет синхронизации?(Дампы MySql, импорт / экспорт и т. Д.)
    • В настоящее время я использую Navicat 10 Premium, который имеет функции синхронизации структуры и данных (я еще не экспериментировал, но они выглядят как огромная помощь)

Так что мне здесь не обязательно нужны подробности (но они помогут).Более или менее я хочу знать, что работает для вас и насколько вы счастливы с этой системой.

Ответы [ 2 ]

5 голосов
/ 28 января 2012

если вы используете версию CE, то:

  • отключите svn и используйте GIT :)
  • никогда не синхронизируйте базу данных, подготовьте обновления базы данных как файлы обновления расширений

    1. имеет 3 сайта dev, stage, live
    2. live база данных копируется на stage и dev при необходимости
    3. вносите все изменения администратора в живую и просто копируйтевся база данных на линии

таким образом, вам никогда не придется синхронизировать базу данных + если вы делаете все изменения конфигурации с помощью сценариев обновления расширений, вы можете выполнить холодную загрузку magento в новую базу данныхструктура где угодно без потери структуры данных

2 голосов
/ 30 января 2012

Я использую 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-дампера снова в базе данных "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 означает, что вы можете исследовать различия, просто посмотрев на вашу базу данных в сравнении с тем, что в текстовых файлах. Не говоря уже о том, что при наличии меньшего количества данных это происходит намного быстрее.

...