2012-01-27 3 views
4

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

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

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

So товар # 1 & 7 Я не совсем понимаю при работе с Magento:

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

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

ответ

2

Я использую phpunit для создания dev db. Я написал short script, который выгружает XML-данные из живой базы данных, и я использовал его по таблице, перетаскивая что-нибудь чувствительное и удаляя то, что мне не нужно. Схема для моей базы данных dev никогда не меняется и никогда не восстанавливается. Только данные удаляются и воссоздаются каждый запуск phpunit.

Не может быть подходящим решением для всех, потому что никогда не будет хорошо синхронизировать работу до стадии/производства, но мне не нужно это делать.

Главное преимущество заключается в том, как мало данных мне нужно для dev db. Это около 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 считывает из заселить вашей базы данных каждый раз, когда Юнит тесты вызываются.

Начните с копирования вашей полной базы данных дважды. Одна из них будет вашей базой данных dev, а вторая будет вашей «первозданной» базой данных, которую вы можете использовать для выгрузки XML-данных, если у вас возникнут ключевые проблемы.

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

+0

Мне любопытно этот метод, потому что я согласен с вами в том, что dev db не нуждается в большом количестве данных для тест с. В основном продукты, настройки и т. Д. Я даже не слышал о phpUnit до этого сообщения. Мне любопытно, если вы не возражаете, чтобы узнать больше о том, как вы выполняете этот сценарий. Я просто хочу, чтобы этот простой, глупый и простой в управлении, особенно потому, что я совершенно новый по версии и обработке сайта такого масштаба. –

+0

Удивительно, я очень ценю всю помощь. Я дам этому вихрь в течение следующих нескольких дней после того, как я завершу пару вещей и уделим время. –

5

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

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

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

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

+1

+1 для использования Git. Скопируйте живую базу данных на stage/dev с помощью скрипта, который выполняет модификации данных, например. изменение основных URL-адресов, сохранение адресов электронной почты и авторизации для сторонних платежных интерфейсов. Анонизировать/изменять данные клиента и заказа. –

+0

Я лично использую скрипты для работы с этим, и да, как объяснил Маттиас, некоторые сценарии обновления sql также необходимы для обеспечения непрерывного и плавного потока между средами. –

+0

Эй, если ты хочешь, чтобы я потрогал SVN, по крайней мере, скажи мне, почему :). Если один из вас может показать мне сценарий или образец или указать мне в правильном направлении, чтобы начать ту, которая была бы чрезвычайно оценена. –

Смежные вопросы