Přejít k navigační liště

Zdroják » Různé » „Prostě to tam nahrajte FTPčkem“ – nebo ne?

„Prostě to tam nahrajte FTPčkem“ – nebo ne?

Články Různé

Nahrání skriptů na server (angl. deploy, česky „nasazení“) mnozí považují za věc, u které není moc co řešit. Co taky řešit u něčeho tak triviálního, jako je upload skriptů, že? Pojďme se podívat na některé věci, které s nahráváním skriptů souvisí, a ukažme si, jak je řešit pomocí verzovacího systému.

V souborech README, v manuálech, návodech a knihách čteme často větu „Skripty nahrajeme na server…“ Některé jazyky či některé frameworky mají vlastní nástroje, které tuto problematiku řeší; těmi se zde zabývat nebudeme. Budeme se věnovat tomu obyčejnému, všednímu postupu, známému všem autorům webů… Řečeno s jednou reklamou: takovému tomu domácímu webaření.

FTP – a kde je problém?

Mnozí webaři už teď kroutí hlavou: kde je problém? Prostě nahraju na server přes FTP potřebné soubory, a je to! 

Autor těchto řádků si vzpomíná na to, jak v roce 2003 řešil deploy svého vlastního projektu, maje modem rychlosti 56.6kbps a nespolehlivé telefonní připojení, placené navíc „od minuty“ (někteří jistě pamatují). Člověk se připojil na server, zjistil, že je někde chyba, a teď ho čekalo rozhodnutí: Bude oprava natolik rychlá, že ji stihne nahrát hned, nebo bude lepší se odpojit, opravit a nahrát až pak? A opravdový problém nastal, když nahrával třeba index.php a v půlce přenosu spadlo spojení. Ubíhaly minuty, zaplněné marnými pokusy o připojení, a když se po půl hodině podařilo spojení opět navázat a soubory nahrát, čekalo v mailu už několik vzkazů a la „Nevím jestli to víš, ale nefunguje ti server, hlásí to chybu!

Dnes je vytáčené spojení (snad) minulostí, takže podobné problémy spíš nehrozí, přesto pokud děláte „deploy TotalCommanderem“, hrozí nemalé riziko nekonzistence skriptů během uploadu. Pokud se nějaký uživatel v tu chvíli připojí, může se stát, že část skriptů bude „nových“, část „starých“. Když nahráváte třeba 400 souborů najednou (což např. u WYSIWYG editorů, plných malých ikonek, není výjimkou), a přenos jednoho, dvou selže, čekají vás navíc nepříjemné chvíle při hledání „podivných“ chyb.

Najednou!

Řešením takových problémů je simulace atomicity, tj. upload souborů „najednou“ (viz vlákno diskuse). Někdo to řeší tak, že má web např. v adresáři „web“, novou verzi nahraje do adresáře „new“, a pak co nejrychleji přejmenuje „web“ na „old“ a „new“ na „web“. U tohoto přístupu bývá problémem to,že nelze použít běžné nástroje pro „FTP synchronizaci“ a přenášet jen změněné soubory, musíte vždy přenést vše.

Pokud to server umožňuje, je velmi dobrým řešením sbalit úpravy do jednoho souboru (např. .tar.gz), ten nahrát na server a pak na něm spustit „rozbalení a přepsání“. Mnohé hostingy sice neumožňují SSH přístup, ale lze využít třeba webového „správce souborů“, kde funkce „rozbalit archiv“ bývá. Rozbalení archivu je několikavteřinová operace, což lze v řadě případů považovat za „téměř atomickou“ – v porovnání s uploadem přes FTP, který je vždy řádově delší.

Výhoda uploadu jediného souboru se ukáže obzvlášť při nahrávání některých velkých frameworků, knihoven či CMS, které obsahují mnoho malých souborů. Například taková sada miniaturních vlaječek států, kde každá ikonka GIF zabírá pár desítek bajtů, ale je jich stovka, je leckdy záležitost na několik minut; pokud jsou sbalené v archivu, trvá upload pár sekund.

Maintenance

Pokud bude deploy trvat delší dobu – ať už kvůli tomu, že budete muset přenášet via FTP jeden soubor za druhým, nebo kvůli tomu, že budete dělat nějaké změny v databázi – je dobré mít připravené „maintenance“ řešení, tedy postup, kterým se uživatelům zobrazí pouze hlášení o tom, že na serveru probíhá údržba. Pokud používáte Apache a máte možnost měnit .htaccess (což kupodivu i v roce 2011 není v ČR vždy samozřejmostí), můžete si vytvořit „maintenance“ verzi, v níž všechny požadavky přesměrujete na jednu prostou HTML stránku („udrzba.html“), kde informujete o tom, že probíhají změny a o tom, kdy zhruba bude server opět v provozu.

Alfa, beta, stage, page…

U malých projektů většinou nikdo neřeší nějaké pracovní kopie a podobné – projekt existuje „u vývojáře v počítači“ a na serveru. U větších projektů je (snad…) už pravidlem, že projekt běží na několika serverech, které mají jasně určené role. Jedním z možných uspořádání je např. toto:

Vývojáři (programátoři, grafici, kodéři…) mají na svých počítačích pracovní kopie a úpravy nahrávají na server Test. Ten je dostupný pouze zvnitřku firmy a na něm probíhá testování – ať už strojové, tak „lidské“. Pokud je sada úprav hotová a funkční, nahrává se na server Stage. Ten může být dostupný i vybraným testerům zvenčí. Je to kopie 1:1 ostrého serveru – stejná konfigurace, stejné prostředí – a slouží k ověření úprav betatestery. Když je nějaká větší sada úprav ověřená na stage, může být někým vyhrnuta na ostrý Live server.

Konkrétní rozdělení úloh se může lišit – podle zvyklostí či specifických potřeb firem a jejich projektového řízení.

Verzovací systém

Verzovací systémy, jako třeba Git či Mercurial (viz Pět důvodů, proč zvolit Git), mohou výrazně usnadnit celý proces „deploymentu“ (nasazení), a to především tím, že je v nich snadné určit změny, které mají být nahrány, od změn, na kterých se ještě pracuje. Konkrétní podoba workflow je opět na zvyklostech a rozhodnutí projektového managementu.

Velká výhoda DVCS je v tom, že repozitář lze vytvořit kdekoli. Na serverech Test, Stage i Live může být adresář s webem zároveň repozitářem, do kterého jsou „pushovány“ změny. Pomocí „hooks“, čili činností volaných při určité operaci, lze zajistit např. automatické rozbalení změn po jejich úspěšném nahrání na server.

Vývojáři si změny „commitují“ do svých pracovních (lokálních) repozitářů, a pokud jsou s nimi spokojeni, provedou „push test“. Změny se tak projeví na serveru test, kde je lze ověřit, spustit strojové testy a další potřebné operace (viz metoda Continuous Integration). Úspěšné úpravy jsou pak označeny (opět ve verzovacím systému) příznakem, podle něhož budou nahrávány na Stage. Nahrání na Stage je opět jednoduchá operace „push“. Po úspěšném ověření na stage opět nastupuje „push“, kterým jsou změny zapsány na Live server.

Výhoda „pushování“ proti přenášení souborů FTP je zřejmá: Při „push“ je přenášena pouze sada změn vůči aktuálnímu stavu. DVCS řeší i případy konfliktů souborů. Přenášení je nezávislé na běhu serveru. Následné „rozbalení“ změn do pracovního adresáře webu je podobné výše popsanému rozbalení změnového archivu. Výhoda je, že veškerou režii s „balením“ úprav do archivu  a jejich následným rozbalením si řeší verzovací systém. Minimalizují se tak chyby vzniklé z nepozornosti (zde platí modifikované přísloví „Opakování je matkou chyb!“)

Praktický příklad

Autor už nepracuje jako vývojář, přesto si nějaké menší webové projekty čas od času udělá. Při vývoji používá verzovací systém Mercurial. Jeho workflow lépe vyhovuje autorovým potřebám než Git, proto v následujícím textu budou příklady používat právě Mercurial. V systému Git by byl pravděpodobně postup velmi podobný.

Prvním impulsem k vyzkoušení něčeho jiného než FTP byla u autora touha zkusit si prakticky framework Django na vlastním serveru. Server běžel u VirtualMaster jako VPS (pro zájemce je k dispozici šablona), takže nebyl problém nainstalovat cokoli.

Několik hostingů z poslední doby, např. Heroku či No.de, používá k nahrání souborů na server právě verzovací systém (konkrétně Git). Implementace takového způsobu je (téměř by se chtělo říct „pozoruhodně“) snadná. Autor na vlastním systému postupoval takto:

  1. Nainstaloval Mercurial (z balíčků)
  2. Vytvořil uživatele „deployer“, v adresáři /home/deployer vytvořil odkaz na adresář se skripty a pojmenoval ho repo (ln -s)
  3. Vytvořil na serveru v /home/deployer/repo repozitář („hg init“) – budeme si jej označovat jako „remote“
  4. V remote repozitáři upravil soubor .hg/hgrc – přidal toto:
    [hooks]
    changegroup = hg up
  5. Výše uvedená změna zajistí, že v případě nahrané změny (changegroup) je vyvolán příkaz „hg up“, který „rozbalí“ aktuální verzi včetně nahraných změn do pracovního adresáře. V tomto místě tedy probíhá ono „rozbalení“.
  6. Po několika testech nahradil „hg up“ voláním skriptu „deploy“ – běžný shell script, který zařídí rozbalení změn a restart wsgi.
  7. Na lokálním stroji vytvořil opět repozitář (hg init)
  8. V lokálním repozitáři si do .hg/hgrc uložil informace o vzdáleném repozitáři:
    [paths]
    default = ssh://deployer@12.34.56.78/repo
  9. Následoval první commit a zkušební push.

Nyní stačí veškeré změny „commitnout“ pomocí hg commit. Nahrání na server je pak otázkou jediného „hg push“ – v jeho rámci si Mercurial sebere provedené změny, nahraje je na server, tam jsou změny promítnuty do pracovního adresáře a server je restartován.

Sdílený hosting + PHP + Mercurial

Druhý pokus byl s PHP hostingem – autor používá levný zahraniční sdílený hosting pro některé PHP projekty, který má přes svou láci některé vlastnosti, co nenabízí ani mnohem dražší české hostingy v této kategorii: zde konkrétně přístup přes SSH a možnost spouštění skriptů v Pythonu.

Mercurial je napsaný v Pythonu, takže k jeho instalaci na server nemusíte mít žádná extra práva; lze jej nainstalovat jako běžný Pythonský skript. Zájemci mohou čerpat inspiraci v článku, kde je popsána instalace Mercurialu a spuštění hgweb na hostingu HostMonster. Postup bude podobný i u jiných hostingů, kde můžete spouštět Python a kde se můžete přihlásit pomocí SSH. Další kroky jsou podobné výše uvedenému postupu.

Díky funkčnímu hgweb není potřeba nastavovat přístup k remote repozitáři přes SSH, lze použít http rozhraní. Stačí nastavit práva k adresáři s hgweb skriptem pomocí souboru .htaccess a direktiv AuthUserFile apod.

V lokálním úložišti si patřičné údaje nastavíme opět v .hg/hgrc – např. takto:

[paths]
default = http://deploy:PASSWORD@www.example.com/hg/home1/path/to/my/project
[ui]
username = deploy

Další postup je stejný jako u výše uvedeného příkladu s Djangem.

Co používáte k nasazení souborů na server?

Závěr

Výše uvedené postupy, náměty a příklady popisují možný způsob řešení obvyklých problémů, spojených s nahráváním skriptů a dat na server. Berte je, prosím, jako inspiraci k vlastnímu řešení, jako „postrčení“ k o něco pohodlnějšímu a bezpečnějšímu způsobu nahrávání skriptů, spíš než jako dogma či jediný možný způsob.

Velké firmy a webová studia většinou mívají tyto procesy už nějak nastavené, ale menší firmy či mnozí freelanceři stále používají ad hoc způsob „deploy TotalCommanderem“. Účelem článku bylo ukázat, že to lze řešit i jinak, pohodlněji, a že toto řešení není s moderními DCVS nijak přehnaně obtížné.

Poznámka k hostingu

Jako v posledních letech několikrát je i tentokrát míč na straně poskytovatelů hostingu. Čeští poskytovatelé mají v této oblasti stále hodně co dohánět, ovšem to je obecný problém. Zatímco ve světě bylo (a je) běžné nabízet „neomezený“ počet domén k jednomu účtu i u levných sdílených hostingů, u nás je to stále trochu unikátní služba. Přístup pomocí SSH ke sdílenému hostingu nabízí v ČR zatím snad jediný poskytovatel. Převládající přístup je stále „Upload přes FTP, co byste chtěli řešit?

Poskytovatelé hostingu v ČR mají stále obrovský „dluh“ vůči moderním technologiím, a zrovna třeba nasazení skriptů pomocí verzovacího systému by mohla být pro ty progresivnější vhodnou „konkurenční výhodou“.

Komentáře

Subscribe
Upozornit na
guest
39 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
Kepi

My například na ruby-hosting.cz poskytujeme SSH přístup už pár let a deploy Ruby on Rails aplikací přes capistrano nabízíme od začátku.

U PHP hostingů máme SSH pravda jen pro několik VIP zákazníků a sami to vnímáme jako nedostatek, ale už se na tom pracuje. Každopádně těžko říct, jak nabídnout nějaké standardizované řešení pro deploy na PHP a hlavně bude o něj zájem?

Osobně mám (možná zbytečný) strach, že o takové služby zájem není a i když příjdeme s něčím novým, zůstane to nepovšimnuto. Možná je to jen špatnou propagací, kdoví…

Tomas

Na co tuto sluzbu? Od roku 2000 co delam webove stranky jsem nepocitil potrebu neceho takoveho.

Tomas

Jeste me napada jedna vec jak jste psal o tom multihostingu. Je Vam doufam znamo ze pokud v zahranici vyuzivate tuto sluzbu treba u hostmonsteru ze neni neomezena a pri prvnim problemu se zatezi Vas suspenduji a vsechny weby si muzete strcit…. A neni to jen hostmonster.

Techto zahranicnich poskytovatelu je velka spousta. Viz. Site5, ktery tu predstavoval pan Krcmar jako to nej nej a po precteni pravidel bych si tam nenechal ani hnusne MFA. Cesky clovicek by nejradsi to nej nej a pokud mozno zadarmo. Jenze tohle takto nefunguje nenacpete na jeden ucet 100 domen za 10$ mesicne!!!

janvlcek

Už nějakou dobu pro deployment PHP aplikace nad Zendem používáme Capistrano. Inspirovali jsme se projektem Capifony (Capistrano pro symfony – https://github.com/everzet/capifony). Je závislost na Ruby moc velkou překážkou pro standardizaci deploymentu PHP projektů?

patrik.sima

Dlouho používám git-ftp.py v pythonu a ničemu to nevadí. Ovšem pracuji na linuxu, kde jsou tyto nástroje běžně dostupné. Ve Windows je třeba Python doinstalovat. Mimochodem Capistrano doporučuje přímo Github na http://help.github.com/capistrano/

Michal

Problem je, ze ceske hostingy vetsinou ssh neposkytuji a kdyz ano, tak pouze na SCP/rsync…. :-/

smilelover

Vetsinu webu mam na Klenot.cz a tam pouzivam SCP pres Ant. http://ant.apache.org/manual/Tasks/scp.html

Nahraji se jen zmenene soubory a s Antem umi dnes pracovat vetsina IDEcek, takze deploy je otazkou treba jedne klavesove zkratky…

Uz me ale taky napadl nejaky system, ktery by vyuzival VCS. Kazdopadne bych to resil pres nejaky tag, protoze temer nikdy nechce clovek deployovat vse, co je v repozitari.

K-Kamil

FTP je hrozný protokol (zabezpečení, propustnost přes firewally a další). Je zajímavé, že pro publikování směrem na server se moc neujal WebDAV. Ten se přitom používá vnitřně v některých komerčních produktech.

Tom

taky bych webdav radši než http://FTP.. Co byl problém, tak bylo najít klienta co uměl ssl certifikát s webdavem..

Jerry12

Pevne doufam, ze uz dneska vetsina lidi vi, ze SSL/TLS nejsou na ozbodu a pouziva SFTP nebo SCP misto klasickyho FTPcka.

-

Deploy by se melo prekladat jako nasadit a deployment nasazeni…

Čelo

Zrovna tady v komentářích jsem narazil na odkaz na https://github.com/aizatto/git-deploy
Zaujalo, vyzkoušel jsem, líbí se, používám….

salko

My už nejakú dobu používame na deploy rsync. Dávnejšie, ešte keď sme mali SVN, tak sme sa snažili robiť deploy pomocou SVN hook skriptov, ale bolo to ťažkopádne.

Petr

Mercurial používám, ale na deploy na Live by mě to asi nenapadlo, přijde mi to náchylné k chybám. Musím udržovat tagy, musím mít hosting co to bude umět (který u nás?), musím.. Nakonec něco špatně otaguji nebo udělám jinou drobnost a problém. Já to pomocí Mercurialu dávám na svůj lokální server, tam to otestuji a když jsem spokojen, zabalím změněné soubory a na webu udělám „rozbal a přepiš“. Mám tak nějak pocit, že nad tím mám větší kontrolu, mám tam ponechaný i předchozí balík, takže kdyby něco, mohu honem udělat rozbal a přepiš s tím starším a jsem zpět (pokud se neměnila struktura db). Jasně, Mercurial mi taky umožňuje vracet, ale tohle je určitě rychlejší způsob návratu a prakticky v něm nejde udělat chyba.

patrik.sima

Bez podpory na serveru je vcelku dobré toto https://github.com/ezyang/git-ftp

Tady je taky řešení http://stackoverflow.com/questions/279169/deploy-php-using-git, které jsem ale nezkoušel. Nicméně je tam dobrá poznámka, že je dobré zabezpečit přístup ke git souborům skrze .htaccess

dasim

Už několik měsíců používám Git a co mi nějvíc usnadnilo život je Beanstalk. Vedle privátních repozitářů, spolupráce apod. je jeho killer-feature jednoduchý deployment.

Dokáže provést deploy přes FTP automaticky při každém commitu, na základě „značky“ v commit message nebo jen kliknutím na tlačítko. Navíc se k deploy dají jednoduše přidat pre- a post-hooky v podobě nějakých HTTP požadavků.

Určitě existují stejné nebo lepší řešení, které i budou zadarmo, ale pokud někdo nění tak zběhlý v podobných věcech (jako já) a za těch $15/měsíc už mi to ušetřilo času i starostí dost a dost. Místo FTP klienta a pátrání ve složkách kam nahrát pár změněných souborů otevřu konzoli git, commit, push a hotovo.

Tomáš Bláha

Zajímavé téma. Já sice přímo nějaký VCS na deployment nepoužívám, ale vždy mám ve zvyku si vytvořit mezi vývojovou a nasazenou verzí diff, projít ho a zkontrolovat, a potom teprve aplikovat příkazem patch.

A doslova rostu, pokud mám někde na cizím serveru „jen“ ftp. Už jsem zažil i takové, kde se soubor par desítek KB nahrával půl minuty a mezitím samozřejmě upload nebyl atomický, takže server házel syntaktické chyby na postupně se zvyšujícím číslu řádku. Stále tedy nechápu, jak to ti lidé, kteří považují FTP za „přece standard“, dělají.

v6ak

Co nemusí na první pohled někomu dojít, je, že maintenance s AJAXem je celkem komplikace. Pokud místo několika obrázků nabídnete jen maintenance, obrázky se nezobrazí a po reloadu se uživatel dozví příčinu. U AJAXu je situace složitější: Kromě toho, že není možné jako u obrázků prostě to směřovat na starší verzi, následky maintenance HTML mohou být horší:
* Pokud není správně zpracován chybný stav XHR, může dojít ke ztrátě dat z formuláře, mystifikaci uživatele („Odesláno.“) apod.
* I pokud je, nemusí dát srozumitelnou zprávu na špatný JSON nebo podobně.

Michal Holub

Ještě bych mohl doporučit webistrano – grafický frontend nad capistrano – tohle + GIT je bomba, takže i méně zdatní developeři (ti co nemusí command line) zvládají deploy.

edois

Ja to resim tak, ze mam vse v debianich balickach, mam vlastni debian repository a kdyz chci neco nasadit, tak to ubalim, nahraju do repa a na serveru/serverech (vetsinou mi to bezi 2x kvuli redundanci) udelam aptitude update && aptitude install balicek :)

ins

docela me prekvapilo ze moznost deploy pres balicky vubec neni v ankete

František Kučera

jj, to je skvělý přístup.

Akorát je trochu nevýhoda, že ten kdo nasazuje, musí být root – zatímco když se nasazuje přes SFTP (SSH) nebo verzovací systém, může to dělat i někdo jiný (tzn. vývojář/admin aplikace nemusí být správce serveru).

Nebo používáš automatické updaty a instaluje se každá nová verze? To by asi bylo řešení.

edois

Vzhledem k tomu, ze na ty stroje stejne muzou jen admini, nam to nevadi. Naopak je fajn, ze tam vyvojari nemuzou nahravat, co se jim zlibi, takze mame dobry prehled co se kde deje…

koubel

ano, balíčky bych bral i jako lepší způsob než vcs. Když už někdo nechce dělat distribuční balíčky, tak v PHP existuje už léta PEAR s celou infrastrukturou ohledně balíčků.
Nově v PHP 5.3 dokonce phar – http://cz.php.net/manual/en/book.phar.php, pomocí něhož uděláte obdobu toho, co je v Javě war.

xzajic

Já to řeším pomocí rSync, ale to samozřejmě vyžaduje ssh přístup…

OldFrog

Co takhle rsync a fuse ftp? Zkousel to nekdo?

v6ak

Zkoušel jsem jen fuse FTP (konkrétně curlftpfs a gvfs FTP). Nevím, čím to bylo, ale měl jsem to značně nestabilní. Pro čtení to někdy použitelné bylo, ale jakmile jsem se snažil zapsat, obvykle se to nezapsalo a nastal I/O hang. Snad má někdo lepší zkušenosti. S oběma nástroji mám podobné zkušenosti.

Martin

Zdravim, nasa mala firma pouziva na PHP cesky hosting. Zda sa mi že jedine čo použiva česky hosting je FTP pristup. Vedel by mi niekto odporučit aké z spomínaných riešení be bolo pre nás a hlavne pre mna najlepsie… To ftp je fakt na nervy, kedze prave vyuzivame casto CMS a upload je zdlhavy a hlavne pri malych upravach tento pristup deploymentu neskutocne zdrzuje … Dik

Tharos

Zdravím Martine, občas si taky u nějakého projektu musím vystačit s FTP a vyvinul jsem si následující „nouzové“ řešení. Používám v něm TortoiseSVN (takže SVN, ale stejně by to šlo například i s Gitem) a WebDrive (existují myslím i volně dostupné alternativy).

1. Vzdálený prostor si připojím přes WebDrive jako diskovou jednotku.

2. V ní si založím v rootu složku například „_repo“, ve kterém přes TortoiseSVN vytvořím SVN úložiště. Přes .htaccess zakáži do této složky HTTP přístup.

3. Ve vzdáleném prostoru vytvořím přímo v rootu přes TortoiseSVN jednu pracovní kopii, která bude představovat produkční verzi.

4. Vedle složky „_repo“ si v rootu vytvořím ještě například složku „_stage“, uvnitř které vytvořím další pracovní kopii. To bude testovací verze na produkčním serveru. U té přes .htaccess zaktivuji HTTP autentizaci.

5. A na závěr si i u sebe na lokálním serveru vytvořím pracovní kopii, ve které bude probíhat vývoj.

Workflow je následující: vývoj probíhá na lokálním serveru v lokální pracovní kopii. Když dojde na deployment, jednoduše provedu commit změn (do úložiště připojeného přes WebDrive) a ve vzdáleném prostoru provedu SVN update stage pracovní kopie. Vše otestuji na doméně http://nejakadomena.tld/_stage a když to funguje, provedu jen SVN update produkční pracovní kopie.

Co se týče databáze, i když je k dispozici jednom jedna, lze s pomocí prefixů tabulek provozovat zároveň produkční i testovací verzi.

Tohle je metoda, která s pouhým FTP přístupem dokáže přinést veškerý komfort pokročilejšího deploymentu. Tak snad někomu dobře poslouží. :)

Petr

pokusil jsem se vytvořit úložiště na FTP, ale ať dělám co dělám, tak nejde vytvořit na FTP úložiště… Jak nastavit práva adresáře ve kterém to chci vytvořit? nejde to ani když dám práva 777.

Almad

Jsem jediny, kdo nahrava tarball do verzovaneho adresare, pak symlinkne a az kdyz se to skontroluje, tak smaze celou verzi?

A jsem jediny, kdo provadi nejake operace mezi tim co se vezme z devel repa a co se nasazuje? (.mo, minifikace, anyone?)

Petr

Používám make, find, tar a lftp.

Tomáš

přinejmenčím APC opcode cache, umožnujě funkci která říká že při změně kódu(datum změny) php souborů se ještě X sekund používá zkompilovaná verze starého kódu.
.htaccess toto možná dokáže ovlivnit.
Za předpokladu že dnešní webhostingy toto mají, dá se tím částečně omezit dopak metody zmíněné v článku. (či při rozbal+přepiš, trvajícím nějaké ty sekundy)

Michal Wiglasz

Ale zase se na to dojde z druhé strany. Po uplynutí X sekund se část souborů už překompiluje, ale u části se ještě bude používat stará verze (než jim uplyne těch X sekund).

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.