Jak aktualizujete webové aplikace? Přes FTP přepíšete soubory za novější? Co se dá říci o chování webu v průběhu přepisování?
Asi jen to, že bude naprosto nepředvídatelné. V lepším případě náhodný návštěvník uvidí prázdnou stránku (Fatal Error), v horším případě citlivé informace či nechtě způsobí poškození dat.
Nejde jen o to, že v každém okamžiku je na webu jiný mix starých a
nových souborů, ale že zrovna kopírovaný soubor může být v tom
nejnepříjemnějším místě přerušený. Prázdný soubor
(require
je spokojeno), jenž má obsahovat důležitou tabulku
práv, může k neštěstí stačit.
Vždyť je to jen vteřinka
Jednak, neříká se vteřina ale sekunda :) a za druhé, internetové spojení a elektrika si dobře vybírají, kdy vypadnout, a takhle chvíle je k tomu jako stvořená.
Navíc ona to sekundička není. Třeba La Trine zobrazuje ve špičce stránku každých 5 sekund a tak bleskově CMS rozhodně neupgradnu.
Co s tím?
Na podobné situace jsou nejlépe vyzbrojeny databáze: mají transakce. U souborových systémů si musíme poradit jinak. Třeba novou verzi nahrát do dočasného adresáře a ten pak přejmenovat.
Z důvodu rychlého (skoro)atomického uploadu také vytvářím tzv. „compact“ verze open-source aplikací. Návod na stlačení skriptů jsem uveřejňoval už dříve.
A japato děláte vy? Spoléháte na štěstí?
Komentáře
Jirka Ch #1
Osobně používám především rsync v kombinaci se SSH. Několikrát jsem použil i onu fintu s přejmenováním adresáře.
XThom #2
Kvôli nechcenému zobrazeniu citlivých údajov, či errorov je najlepšie asi upgradeovať v noci, čo ale je nechránené voči absencií elektriny.
Najlepšie je potom asi na nejaký čas stránku „zablokovať“ s oznamom na štýl „momentíček, za chvíľu to tu bude back“. Inteligentný návštevník pochopí a počká :)
marek #3
hlavně na štěstí, jde taky o to kdy, ve tři ráno mam většinou kliku :) a u důležitějších webů přejmenovávám…
Václav Vaník #4
Já to dělám tak, že na server nahraju index.html s hláškou, že server se upgraduje a pak .htaccess, kde přesměruji vše na index.html, až je vše upgradnuto, tak oba soubory smažu 😉
Jirka Pech #5
Trik s přejmenováním používám, ale u SELinuxu doporučuji nezapomenout na obnovenení správného nastavení adresářů, atd.
Další z možných triků je všechno připravit v jiném adresáři a přepnout document root pomocí graceful restartu apache (pokud používáte tento web server). Sice s tím už musíte počítat v návrhu aplikace, ale řešení je to velmi elegantní, protože výpadek je prakticky nulový.
Leo #6
Ja se tim nezatezuju, u webu co jsem delal to nehralo podstatnejsi roli. U prejmenovani adresare to znamena, ze musite prenest znova cely web (podadresar) ne? A co ma Schrodinger spolecneho s nepredvidatelnosti?
Leo
error414 #7
u vlastniho blogu to nahrnu vecer, kdyz se neco podela tak mohu aspon nadavat.
Jinak na vecech kde jde o prachy pouzivem CVS. Nevim presne jak to interne resi, mozna to tam jen nakopiruje rychle nevim. Byl mi doporucen na updaty webu.
Pavel Zbytovský #8
Díky mod_rewritu mi jdou všechny skripty přes index.php a pokud chci web pozastavit, jen si vytvořím přes FTP složku s názvem stop. Myšlenka:
A ještě si ze zkušenosti ukládám všechna POST data, kdyby někdo náhodou vkládal článek, tak aby se nic neztratilo.
Pjotr #9
XThom, ale v noci je to len lokálne, pretože ak sa niekto pozrie z opačného konca planéty (samozrejme, že Zem), tak to má povedzme, že aj poludnie.
Arcao #10
#8 Pavle Zbytovský, dobrý nápad, ale ještě by bylo možná lepší místo českých znaků použít escapované verze &#xxx; , nebo posílat kódování dokumentu. Dále by tam třeba mohlo být meta refresh, který by dotyčného člověka automaticky přesměroval, pokud by byl update dokončen.
Arcao #11
#9 Pjotře, pokud děláš web czech only tak je to v pohodě, jinak nejlepší čas na noční updaty je kolem 4 hodiny ráno…
Reg #12
#6 Leo, no to je přeci podle toho kvantovýho pokusu s Schrodingerovou kočkou kde neni určený jesli je kočka živá nebo mrtvá dokud se na ní někdo nepodívá nebo nějak tak…
Huggi #13
brzo ‚po ranu‘ pouhym prepsanim..ale je pravda, ze to nejsou ninjak dulezity weby..;)
Čtení blogů po očku může způsobovat šilhavost.
nema nahodou varovani bejt prez 1/3 plochy?:))
Arcao #14
PS: Varování ministerstva zdravotnictví: Čtení automaticky generovaných komentářů může způsobovat imbecilitu.
llook #15
#10 Arcao, tady někdo nechápe, že když je u kódu napsáno „myšlenka“, že jde o něco jako pseudokód…
Lukáš Lánský #16
No, nebyl bych to já, kdybych nezdůraznil technologickou dominanci technologie ASP.NET, která na podobné situace pamatuje 🙂
Tajemství souboru app_offline.htm
Borek #17
#16 Lukáši Lánský, To není technologická dominance, ale usnadnění práce, která by normálně zabrala asi 2 minuty (jak už někdo psal, .htaccess a maintanance.htm to řeší).
Jiná možnost: v Drupalu je „app_offline“ zabudováno do CMS. Tak je to správne a tak to ma byť.
Ale co si budeme povídat, upload přes FTP stejně dělá u malých věcí každý :)
Arcao #18
#17 Borku, né všude je povolené používání .htaccess souborů…
*V*ě*r*o*š* #19
Při velkých změnách shodím aplikační server, po opravení/upgradu ho zase nahodím.
Až budu plánovat dlouhou odstávku, tak spustím kopii serveru, která bude hlásit „pracuje se“ a patřičný HTTP response (503?).
Jen ještě musím někde sehnat lopatu, abych se s ní vyfotil. Nápis „pracuje se“ bez obrázku kopáče je nanic.
rarouš #20
Jak psal kolega #16 Lukáš Lánský v ASP .NET využívám možnosti
app_offline.htm
, nejen při FTP nahrávání, ale i při deployi ze Studia a v práci má staging na starosti někdo jiný :DPetr Gürth #21
Jde to jednoduššeji?
Mordae #22
#19 *V*ě*r*o*š*, Sakra, lidi, ja se snad necham premluvit a budu taky delat v Py, jenom me sakra nici syntax, moc odlisna od C…
Tom #23
Ja hostuju na freehostingu pipni.cz, kde jsou vypadky beznym chovanim, takze se ten upgradovy od toho serveroveho vubec nepozna 😉
Myslim ze pri celkove dostupnosti serveru 87% nema nejakta vterika na zazitek z webu zadny negativni vliv.
Qwe #24
#17 Borku, nahozenim app_offline.htm se take detachuje databaze a dalsi navazane zalezitosti, takze to neni „nahrada neceho, co lze napsat za 2 minuty“ – je to pomerne promyslene ;)
error414 #25
Dam boty za to ze DGX chysta nejakou ficurku jak to obejit.
Borek #26
#24 Qwe, Detachování je záležitost SQL Serveru, tady byla řeč o problému přepisování starých souborů novými a to lze velmi snadno zařídit i jinde. Tím ale app_offline nijak nehaním, je to dobrá věc, jen si nemyslím, že by dokazovala „technologickou dominanci“ ASP.NET. Ta je dokázána úplně jinými věcmi :)
Borek #27
#25 error414, Jaké máš číslo, měl bych zájem :) Tohle totiž nelze vyřešit – buďto je to vestavěno přímo v technologii (v ASP.NET to je, v PHP nikoliv) nebo máš smůlu. Dá se to řešit, když máš přístup k .htaccess nebo httpd.ini souborům, ale to už se nebavíme o univerzálním řešení…
David Grudl #28
#25 error414, Tady padlo docela dost hezkých řešení a tím se záměr vlastně vyplnil – každý si může vybrat podle gusta.
carnero #29
U některých serverů vzniká při uploadu přes FTP v rootu dočasný soubor – využíval jsem to, kontroloval jsem zda existuje a pokud ano, uživatel měl na chvíli informaci o „aktualizaci“ – osobní web, takže minuta offline až tak nevadila a lepší než nějaká blbost.
mrzout #30
Kdybych se tim chtel zabyvat, nahraju to vedle a pak zmenim cesty v nastaveni vhosta a reloadnu apache.
Ale nechci :)
adzio #31
Tak jde to udělat i následovně, sice to považuju za krajní nouzi, ale budiž. Ku příkladu je třeba upgradeovat soubor xy.php nebo index.php…Hotový soubor přejmenujeme třeba na index1.php a nahrajeme na FTP. Stránka se stále načítá z staré verze index.php…Pak je třeba mít hrooozně rychlé FTP a taky myš, rychle přejemnovat a smazat…Je to sice naprosto laické, ale pro lamy ideální…
Pachollini #32
U těch důležitých:
scp user@server:www/web ./web-new
mv web web-old; mv web-new web
Jakub Vrána #33
Já jsem si skript pro zpracování šablon upravil tak, že kompiluje až šablony, které jsou alespoň 2 –vteřiny– sekundy staré.
Jan Tichý #34
U projektů, kde na tom zase až tak nezáleží, to opravdu nechávám na náhodě, i když se mi to už párkrát vymstilo – zpravidla se mi kouslo FTP uprostřed uploadu nejdůležitějšího souboru a web pak vyhazoval rozličné parse errory.
Pro důležité projekty mi jako nejlepší řešení přijde mít klidně i více různých verzí aplikace uklizené někde v paralelních adresářích. Na tu aktuální pak udělat symlink. Když potřebuji aktualizovat, v pohodě si vytvořím další adresář s nejnovější verzí a když je upload v pořádku hotov, tak jenom přehodím symlink.
Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.