magento: синхронизация базы данных между производством, подготовкой и разработкой

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

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

  1. Синхронизировать базу данных разработчика из производственной базы данных
  2. Оформить рабочую копию кода на машину разработчика
  3. Внесите изменения и протестируйте их на сервере разработки
  4. Принять изменения и отправить их в хранилище SVN
  5. Коснитесь флажка Maintenance.flag на рабочем сервере и подготовьтесь к обновлениям (это полностью устраняет проблемы с синхронизацией у пользователей, взаимодействующих с оперативными данными, которые скоро изменятся?)
  6. Слияние веток с транком и развертывание репозитория на рабочем сервере
  7. Синхронизация 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:)
  • Никогда не синхронизируйте базу данных, подготовьте обновления базы данных как файлы расширения расширений

    1. есть 3 сайта разработчиков, сцена, в прямом эфире
    2. живая база данных копируется на сцену и разрабатывается при необходимости
    3. Внесите все изменения в админку и просто скопируйте всю базу данных

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

Другие вопросы по тегам