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.