Robo feladat végrehajtó
A Grunttal történt rövid ismerkedés után tudtam, hogy milyen irányban kell kutakodnom ha elégedetten szeretném használni a választott automatizáló megoldást. Azt is tudom, hogy a node.js ellen küzdeni hasztalan, de amíg nem merülök el benne jobban maradok a PHP mellett. Így esett a választás a Robo feladat végrehajtóra.
A feladat megegyezik azzal, amit a Grunt bejegyzésben már bemutattam:
- találja meg a legújabb tömörített fájlokat egy bizonyos mappán belül
- tömörítse ki a megtalált fájlokat
- másolja a kitömörített fájlokat a megadott helyre a megadott jogosultságokkal
- importálja az adatbázisba az adatbázismentést
Mivel a Robonak is létezik shell parancsfuttató funkciója, ezért a shell scriptet kényelmesen át lehet emelni, a Grunt esetében is ez volt az első lépés. Azonban a RoboFile egy hétköznapi PHP osztály, sokkal rugalmasabb a feladatok megvalósításában, ezért bátrabban kalandozik el az ember. A legújabb fájlok megtalálásához akár ilyen megoldás is születhet:
private function getlatest () { $filesfs = array(); $filesdb = array(); foreach (scandir($this->indir) as $file) { if (fnmatch($this->fspattern, $file)) { // FS files $base = basename($file, '.tar.gz'); $filesfs[$base] = filemtime($this->indir . '/' . $file); }elseif (fnmatch($this->db.'*', $file)) { // DB files $base = basename($file, '.sql.gz'); $filesdb[$base] = filemtime($this->indir . '/' . $file); }else{ continue; } } arsort($filesfs); reset($filesfs); $first_key = key($filesfs); $this->say($first_key); $this->latestfs = $this->indir.'/'.$first_key; arsort($filesdb); reset($filesdb); $first_key = key($filesdb); $this->say($first_key); $this->latestdb = $this->indir.'/'.$first_key; }
Ez egy hosszú kód. Akkor különösen, ha a shell parancsot meghagyva következő módon is elérhettük volna:
$latestfs = $this->taskExec('basename $(ls -1 -dtr '.$this->indir.'/'.$this->pattern.' | tail -1) .tar.gz')->run();
A tömörségben nem lehet vele versenyezni, de nem biztos hogy ezt a shell scriptet a projektbe újonnan csatlakozó PHP fejlesztő megérti vagy a Windows gépén egyáltalán le tudja futtatni. De kétségtelenül vannak hátrányok. A fájlok kitömörítésénél 2-2,5 GB-os biztonsági mentéssel kell megbirkózni. A feladat PHP-ban sem lehetetlen, az Archive_Tar osztály nagyon jó szolgálatot tesz, de a teljesítményben alulmarad. Méghozzá jócskán:
[RoboFile] Extracting with shell... [Exec] running tar -C /var/backups/backup-6-29-2015 -xzf /var/backups/backup-6-29-2015.tar.gz ./public_html/projekt [Exec] Done in 81.413s [RoboFile] Extracting with shell finished: 81.454183101654 [RoboFile] Extracting with PHP... [RoboFile] Filelist with PHP finished: 103.15755081177 [RoboFile] Extracting with PHP finished: 1638.9883499146
Ezt a 20-szoros különbséget nem lehet figyelmen kívül hagyni, és amíg jobb lehetőség nincs, benne kell maradnia a shell parancsnak.
A terjedelem és teljesítménybeli hátrányokat bőven ellensúlyozza az, hogy a Robót a valószínűleg már létező composer.json fájlunkhoz hozzáadva egyszerűen telepíthetjük, és egy PHP projektben otthonosabban fogják magukat érezni a fejlesztők, mint valamelyik node.js alternatívában.