我今天一直在阅读Magento中的数据库同步。
我目前正在努力解决的一件事是在开发期间和上传到生产期间需要同步的内容。现在假设一批更改将包括对数据库和代码的更改,下面是我对模型工作流程的理解(我目前不使用' stage '服务器,因此绕过了这个例子):
所以#1& 7与Magento合作时,我并不完全明白:
所以我不一定需要具体细节(但他们会帮助)。或多或少我想知道什么对你有用,你对这个系统有多高兴。
答案 0 :(得分:5)
如果您使用的是CE版本:
永远不要同步数据库,准备数据库升级作为扩展升级文件
这样您就不必同步数据库+如果您通过扩展升级脚本进行所有配置更改,您可以将您的magento冷启动到新的数据库结构,而不会丢失数据结构
答案 1 :(得分: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读取的种子文件,以便在每次调用单元测试时重新填充数据库。
首先复制整个数据库两次。一个将是您的开发数据库,第二个将是您的“原始”数据库,您可以使用它来转储xml数据,以防您遇到关键问题。
然后,在“prisine”数据库中使用类似我的xml dumper之类的内容来获取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的小尺寸意味着您只需查看数据库与文本文件中的内容即可检查差异。更不用说数据更少的速度要快得多。