Workflow for Magento Database
-
13-12-2019 - |
Question
I am planning on a Magento Workflow for staging and live enviroment.
I want to use git for the filesystem. The workflow here is sorted already.
But how to manage Database modifications?
While on the live server there is new customer data I have new configuration & product data in the staging system. Is there any tool to resolve these conflicts?
I researched myself https://www.mysql.de/products/workbench/ is there a way to do it with this tool? Has anybody experience with that?
Solution
For configuration managed by the developer I strongly recommend update scripts. Create a module Projectname_Config
with a setup resource and put your configuration scripts in app/code/local/Projectname/Config/data
It is important to use data update scripts because they are triggered after the sql update scripts. So when you update a system with an outdated database, first all extensions are installed (tables created etc.) and then configured.
The naming scheme for data update scripts is
data-install-x.x.x.php
to install version x.x.xdata-upgrade-x.x.x-y.y.y.php
to upgrade version x.x.x to version y.y.y
Example update script
/** @var Mage_Catalog_Model_Resource_Setup $installer */
$installer = $this;
$germanStoreId = Mage::app()->getStore('de')->getId();
$installer->setConfigData('general/store_information/name', 'My cool shop');
$installer->setConfigData('general/store_information/name', 'Mein knorke Laden', 'stores', $germanStoreId);
Complex data
Theroretically you can create any data in these scripts, but I usually only use them for simple models like CMS pages and blocks, sometimes for categories.
I don't think, products should be created on a staging system and then moved over. If you must do so, I would try ImportExport
to export the new products on staging to CSV and import them on production.
But the usual approach is to manage your products outside of Magento anyway, then you can import them into each instance.
For other complex products like shopping cart rules it is so complicated and error-prone that I rather take the time to create them manually on each system.
You will find a few tools that promise migrating any data from one store to another but I don't think there is a silver bullet to this problem.
OTHER TIPS
There is a tool called https://mageflow.com/. They claim that they're able to keep track of nearly all Magento entities, but I personally haven't tried it yet.
Another way to do this is to have a module with install scripts. This module could be in your git repo, and you could increase the version number and add a new install script every time you want to push database changes to the live system. This can be a major PITA; but is the best "manual" method I know of.