Date post: | 13-Jun-2015 |
Category: |
Technology |
Upload: | roberto-gambuzzi |
View: | 258 times |
Download: | 0 times |
EASY MAGENTO SYNCHRONIZATIONPresented by &
Mage::day(2013); // Modena - 8 Novembre 2013
Alessandro Ronchi Roberto Gambuzzi
CHI SIAMO
Membri e Fondatori del
Magento Certified DevelopersColleghi in
PUG MoRe
@webgriffe
PERCHÉ E COME È NATOPROBLEMA
Propagare modifiche in Admin Panel su diversi ambienti
SOLUZIONI POSSIBILIA mano: time consuming, error prone, costosoUpgrade Script: time consuming, e conflitti su featurebranchDB centralizzato: no offline, concorrenza spietataSelenium: selettori da correggere e non cross-platformMageFlow (?): "MageFlow Beta is launching in December"Mageploy: niente codice, distribuito, time-saving
COME FUNZIONALIVE DEMO
COME FUNZIONASTATUS E RUN (GIT PULL SU ALTRO AMBIENTE)
vagrant@precise32:/var/www/mag1800$ git pullremote: Counting objects: 27, done.remote: Compressing objects: 100% (4/4), done.remote: Total 14 (delta 3), reused 14 (delta 3)Unpacking objects: 100% (14/14), done.From github.com:pug-more/demo-mageday2013ea5a492..7e44329 master -> origin/masterUpdating ea5a492..7e44329Fast-forwardvar/mageploy/mageploy_all.csv | 1 +1 files changed, 1 insertions(+)
COME FUNZIONASTATUS
vagrant@precise32:/var/www/mag1800$ php shell/mageploy.php -s
Mageploy v 1.1.9 - tracking is active - user is roberto
Pending Actions list:ID: 1 - Save new Magazzino 'mag-001' (aronchi on Mon Oct 28 09:22:56 2013)
Total pending actions: 1
RUN
vagrant@precise32:/var/www/mag1800$ php shell/mageploy.php -r
Mageploy v 1.1.9 - tracking is active - user is roberto
Action ID #1 - success Elemento creato con successo
Executed actions: 1/1
COME FUNZIONAPANNELLO DI ADMIN
COME FUNZIONAPANNELLO DI ADMIN (DELETE)
COME FUNZIONAPANNELLO DI ADMIN (COMMIT E PUSH DELLA DELETE)vagrant@precise32:/var/www/mag1800$ git status# On branch master# Changes not staged for commit:## modified: var/mageploy/mageploy_all.csv#
vagrant@precise32:/var/www/mag1800$ git commit -am "Eliminato magazzino"[master eddeb26] Eliminato magazzino1 file changed, 1 insertion(+)
vagrant@precise32:/var/www/mag1800$ git pushCounting objects: 9, done.Delta compression using up to 2 threads.Compressing objects: 100% (3/3), done.Writing objects: 100% (5/5), 440 bytes, done.Total 5 (delta 2), reused 0 (delta 0)To [email protected]:pug-more/demo-mageday2013.git357d4bf..eddeb26 master -> master
COME FUNZIONAPANNELLO DI ADMIN (RICEZIONE DELLE DELETE DA PARTE
PRIMO DEV)
alessandro@Kowalski:~/NetBeansProjects/mage1800$ php shell/mageploy.php -s
Mageploy v 1.1.9 - tracking is active - user is aronchi
Pending Actions list:ID: 2 - Delete existing Magazzino 'mag-001' (roberto on Mon Oct 28 10:21:20 2013)
Total pending actions: 1
alessandro@Kowalski:~/NetBeansProjects/mage1800$ php shell/mageploy.php -r
Mageploy v 1.1.9 - tracking is active - user is aronchi
Action ID #2 - success Elemento cancellato con successo
Executed actions: 1/1
COME È SVILUPPATOTHE MAGENTO WAY
Request Funnel: registra le invocazioni alle Action a cui èassociato un TrackerTracker: implementa encoding e decoding dei parametridelle Action convertendo gli ID specifici di ogni ambiente inUUIDUUID (Universally Unique Identifier): identificaunivocamente le entità secondo una logica specifica;implementazione potenzialmente complessa che puòrichiedere vincoliConfig: un modulo può aggiungere i propri Trackerdichiarandoli nel config.xml
COME È SVILUPPATO
COME È SVILUPPATODICHIARAZIONE DI UN TRACKER NEL CONFIG.XML
<config> ... <default> ... <mageploy> <actions> <demo_mageday2013> <disabled>0</disabled> <class>Demo_Mageday2013_Model_Mageploy_Action_Magazzini</class> </demo_mageday2013> </actions> </mageploy> ... </default> ...</config>
COME È SVILUPPATOLA CLASSE CHE IMPLEMENTA IL TRACKER
EstendePugMoRe_Mageploy_Model_Action_Abstract
Implementazione minima per registrare le informazioniutili nel log utilizzando la funzione match() della classe
base<?phpclass Demo_Mageday2013_Model_Mageploy_Action_Magazzini extends PugMoRe_Mageploy_Model_Action_Abstract{ const VERSION = '1';
protected $_code = 'demo_mageday13_magazzini'; protected $_blankableParams = array('key', 'form_key');
protected function _getVersion() { return Mage::helper('pugmore_mageploy')->getVersion(2).'.'.self::VERSION; }}
COME È SVILUPPATOLA FUNZIONE MATCH() DELLA CLASSE BASE
<?phppublic function match() { $h = Mage::helper('pugmore_mageploy'); $h->log("Module name: %s", $this->_request->getModuleName()); $h->log("Controller name: %s", $this->_request->getControllerName()); $h->log("Action name: %s", $this->_request->getActionName()); $h->log("Request Parameters: %s", print_r($this->_request->getParams(), true)); return false;}
COME È SVILUPPATOINFORMAZIONI NEL LOG DOPO UNA SAVE ACTION
NEW2013-10-28T08:44:27+00:00 DEBUG (7): Module name: demmag20132013-10-28T08:44:27+00:00 DEBUG (7): Controller name: adminhtml_magazzini2013-10-28T08:44:27+00:00 DEBUG (7): Action name: save2013-10-28T08:44:27+00:00 DEBUG (7): Request Parameters: Array( [key] => 1da213e76...519158b044a [form_key] => v11Moz5RhX5U84O3 [codice] => mag-001 [nome] => MBCenter [nazione] => IT [citta] => Modena [cap] => 41100 [indirizzo] => viale Virgilio, 52/E [email] => [email protected] )
DELETE2013-10-28T09:00:28+00:00 DEBUG (7): Module name: demmag20132013-10-28T09:00:28+00:00 DEBUG (7): Controller name: adminhtml_magazzini2013-10-28T09:00:28+00:00 DEBUG (7): Action name: delete2013-10-28T09:00:28+00:00 DEBUG (7): Request Parameters: Array( [id] => 1 [key] => f661970...23ce30a6)
COME È SVILUPPATOCLASSE COMPLETA PER IL TRACKING DEI MAGAZZINI
su GitHub
<?phpclass Demo_Mageday2013_Model_Mageploy_Action_Magazzini extends PugMoRe_Mageploy_Model_Action_Abstract{ const VERSION = '1';
protected $_code = 'demo_mageday13_magazzini'; protected $_blankableParams = array('key', 'form_key');
protected function _getVersion() { return Mage::helper('pugmore_mageploy')->getVersion(2) . '.' . self::VERSION; }
public function match() { if (!$this->_request) { return false; }
if ($this->_request->getModuleName() == 'demmag2013') { if ($this->_request->getControllerName() == 'adminhtml_magazzini') { if (in_array($this->_request->getActionName(), array('save', 'delete'))) { return true; } } }
return false; }
public function encode() {
COME È SVILUPPATORISULTATO DEL TRACKING (CSV)
col1: 1382952176col2: aronchicol3: Save new Magazzino 'mag-001'col4: Demo_Mageday2013_Model_Mageploy_Action_Magazzinicol5: Demo_Mageday2013col6: adminhtml_magazzinicol7: savecol8: o3OntzOjY6ImNvZGljZSI7c...tb3JlLmdydXNwLm9yZyI7fQ==col9: 1.1.1
CONFLITTIScenario: due programmatori hanno creato un magazzinocon lo stesso codice. Il primo ha già fatto commit e push.
Il secondo si ritrova nello stato seguente:
alessandro@Kowalski:~/NetBeansProjects/mage1800$ git pullremote: Counting objects: 9, done.remote: Compressing objects: 100% (1/1), done.remote: Total 5 (delta 2), reused 5 (delta 2)Unpacking objects: 100% (5/5), done.From github.com:pug-more/demo-mageday2013 4683099..587da1b master -> origin/masterAuto-merging var/mageploy/mageploy_all.csvCONFLICT (content): Merge conflict in var/mageploy/mageploy_all.csvAutomatic merge failed; fix conflicts and then commit the result.
CONFLITTICosa troveremo nel mageploy_all.csv ?
<<<<<<< HEAD1382956530,aronchi,"Save new Magazzino 'mag-001'",Demo_Mageday2013_Model_Mageploy_Action_Magazzini=======1382956146,roberto,"Save new Magazzino 'mag-001'",Demo_Mageday2013_Model_Mageploy_Action_Magazzini>>>>>>> 587da1b12229317342038ef3854357f2e1c650fc
Come si risolve? Parlandosi :-)
Un conflitto di questo tipo è il risultato di una mancatacomunicazione; va risolto scegliendo l'azione da mantenere
o eliminando entrambe e registrandone una nuova.
CONCLUSIONIAS-IS
Attribute TrackerCategory TrackerCMS TrackerStoreSystem Config (sperimentale)
TO BEPiù Tracker possibiliControllo dei vincoliTest automatici
?Q & (HOPEFULLY) A
GRAZIE!RIMANIAMO IN CONTATTO...
Mageploy:
Twitter: -
GitHub: -
Blog:
PUG MoRe:
mageploy.com
@aleron75 @pug_more
github.com/aleron75 github.com/pug-more
www.magentocommunity.it
http://more.grusp.org
Magento Italia on G+