Teisingas web projektų publikavimas
Dirbant su didesniais web projektais yra vienas žingsnis, kuris kartais kelia net galvos skausmą. Nors tai atrodytų elementaru – projekto publikavimas, atnaujinimas, bet tai yra dažnai sudėtingiau nei atrodo. Su kokiomis problemomis dažniausiai galima susidurti?
Tarkim el. parduotuvei yra užsakytas didelis atnaujinimas, kuriame yra tiek dizaino atnaujinimai, tiek naujų funkcionalumų įdiegimas. Publikuojant visuomet reikia prisiminti, kad:
- Įkelti visus reikalingus failus
Jei galvojate, kad protingas sprendimas viską projektą tiesiog įkelti negalvojant tai tinka ne visuomet. Tai tinka dažniausiai tik mažoms svetainėms. Geriausias sprendimas yra toks, kad atnaujinti tik, tai kas pasikeitė. Tai galėtų padėti dalinis svn exportavimas naudojant papildomus skriptus (tarkim naudoju kartais mofio šiek tiek modifikuotas mano), arba naudojantis servisais kurie suteikia automatinio deploymento galimybes tarkim springloops.com, beanstalkapp.com ir t.t. Kelti visą projektą rankiniu būdų yra blogai, nes tai pirma pakankamai ilgai užtrunka (nebent kopijuotume vieną suarchyvuotą failą ir jį vietoje išarchyvuotumėte), bet ir galimi dažni tarkim ftp sutrikimai.
- Nustatyti teisingas direktorijos teises
- Atnaujinti duombazes
- Išvalyti (jei reikia) naudojamą cache
Kiti darbai dažniausiai daromi rankiniu būdu, bet to galima išvengti. Tarkim įkėlus failus galima turėti savo deploymento skriptą, kuris atlieka vis reikalingus darbus už jus. Springloops turi galimybę “papinginti” nustatytą url, kai deploymentas yra užbaigtas. O ten pagal jūsų nustatys scenarijus atlieki veismai, tarkim
<?php Object::getCache()->clearCache();
$aDirsToChmod = array(‘path/dir1′,’path/dir1’);
foreach ($aDirsToChmod as $sDir) { chmod($sDir, 777);} ?>
Su duomebazių atnaujinimais, galimi įvairūs scenarijai, tiek rankinis, tiek per pagalbines priemos.
- Galite pasidaryti savo duombazių atnaujinimo mecganizmą su pagalbine db lentele, kurioje saugomi versijuojami db atnaujinimai
- naudoti SQL ORM tarkim Doctrine
Galima naudoti ir daugelį kitų priemonių tokių kaip Capistrano (padarytas su rubiu), Fredistrano (PHP, CakePHP), Phing
O kaip realizuojate jūs?
Capistrano – jokio galvos skausmo :-) Be to, reikia turėt galvoj, kol keliate failus į production versiją, jeigu tai darote “tiesiai”, puslapį tuo momentu paliekant nevaldomoj būsenoj – no good
Juk galima visuomet under maintainance padaryti puslapį laikinai :)
Taip, tik labai maža dalis tuo pasirūpina :-)
Žinau :) kitas teisingas būdas (jei lengvesnių variantų nėra) publikuoti naktį jei yra automatinis mechanizmas
arba pasidaryti aliasus direktorijų, kurie padėtų lengvai šokinėti tarp svetainių versijų :)
Capistrano kaip tik tą ir daro, manau analogiškai ir kiti įrankiai sprendžia tai :-)
Žinau, kad taip capistrano veikia, gal jis turi teisingą įrankį surasti pasikeitusius failus?
Naudoti atitinkama versijų kontrolės būdą paimti tik diff’ą. O ir šiaip kadangi kopijuojama į atskirą direktoriją ir tai tik kodas, na daugų daugiausiai dar + dizaino paveikslėliai, tai argi tai tikrai problema? Tos kelios sekundės?
Panašaus tipo kaip mofio skriptukas
http://www.electrictoolbox.com.....es-cli-v2/
Rašiau kažkada apie Django svetainių publikavimą. Manau, kad daugelis punktų atitinka ir kitom technologijom pagamintom svetainėm:
http://djangotricks.blogspot.c.....abric.html
Visai patogus dalykas yra SVN post-commit hook. Tiesiog parasai bash scriptuka kuris tarkim iskviecia svn update, bei kitas reikalingas komandas (jei tokiu isvis yra) ir uztenka ucomitinti projekta kad viskas atsidurtu serveryje. AIsku, ten jau galima pasirasyt kad upadintu tik kazkuri branch’a ir pan.
SVN hook’us teisinga naudoti developmentui ir dėjimui į dev serverį. Su live developmentų reikia elgtis atsargiau :)
Na bet palyginus su rankiniu ikelimu, tai manyciau yra zingsnis i prieki, be to gana paprastas, zmonems turintiems bent menkiausia supratima apie bash skriptus (sk. mokanciu naudotis komandine eilute) nereikia mokintis nauju dalyku :)