Na navigaci | Klávesové zkratky

Schrödingerův web

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

  1. Jirka Ch http://www.chomat.net/ #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.

    před 11 lety
  2. XThom http://blog.gluchman.sk #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á :)

    před 11 lety
  3. marek http://www.ibike.cz #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…

    před 11 lety
  4. Václav Vaník http://www.walk.cz #4

    avatar

    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 ;-)

    před 11 lety
  5. Jirka Pech http://hq.cz #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ý.

    před 11 lety
  6. 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

    před 11 lety | reagoval [12] Reg
  7. 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.

    před 11 lety
  8. Pavel Zbytovský #8

    avatar

    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:

    if(is_dir("stop")){
      echo "<h1>Web dočasně odstaven v " . date("j.n.Y H:i:s", filemtime("stop")) . ".</h1>";
      exit;
    }

    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.

    před 11 lety | reagoval [10] Arcao
  9. Pjotr http://sietook.druskova.sk #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.

    před 11 lety | reagoval [11] Arcao
  10. Arcao http://www.arcao.com #10

    avatar

    #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.

    před 11 lety | reagoval [15] llook
  11. Arcao http://www.arcao.com #11

    avatar

    #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…

    před 11 lety
  12. Reg http://reg.regzone.org #12

    avatar

    #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…

    před 11 lety
  13. Huggi #13

    avatar

    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?:))

    před 11 lety
  14. Arcao http://www.arcao.com #14

    avatar

    PS: Varování ministerstva zdravotnictví: Čtení automaticky generovaných komentářů může způsobovat imbecilitu.

    před 11 lety
  15. llook http://llook.wz.cz/weblog/ #15

    avatar

    #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…

    před 11 lety
  16. Lukáš Lánský http://www.czech-ware.net/lansky #16

    avatar

    No, nebyl bych to já, kdybych nezdůraznil technologickou dominanci technologie ASP.NET, která na podobné situace pamatuje :-)

    Tajemství souboru app_offline.htm

    před 11 lety | reagoval [17] Borek [20] rarouš
  17. Borek http://www.borber.com/ #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ý :)

    před 11 lety | reagoval [18] Arcao [24] Qwe
  18. Arcao http://www.arcao.com #18

    avatar

    #17 Borku, né všude je povolené používání .htaccess souborů…

    před 11 lety
  19. *V*ě*r*o*š* http://www.cestovatel.cz/~2/ #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.

    před 11 lety | reagoval [22] Mordae
  20. rarouš http://www.rarous.net #20

    avatar

    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ý :D

    před 11 lety
  21. Petr Gürth #21

    avatar
    • spustím 503 stránku v systému
    • svn update
    • vypustím 503 stránku v systému

    Jde to jednoduššeji?

    před 11 lety
  22. Mordae http://mordae.net #22

    avatar

    #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…

    před 11 lety
  23. Tom http://blog.hubalek.net/ #23

    avatar

    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.

    před 11 lety
  24. 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 ;)

    před 11 lety | reagoval [26] Borek
  25. error414 http://www.error414.com/ #25

    avatar

    Dam boty za to ze DGX chysta nejakou ficurku jak to obejit.

    před 11 lety | reagoval [27] Borek [28] David Grudl
  26. Borek http://www.borber.com/ #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 :)

    před 11 lety
  27. Borek http://www.borber.com/ #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í…

    před 11 lety
  28. David Grudl http://davidgrudl.com #28

    avatar

    #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.

    před 11 lety
  29. carnero http://carnero.info #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.

    před 11 lety
  30. mrzout #30

    Kdybych se tim chtel zabyvat, nahraju to vedle a pak zmenim cesty v nastaveni vhosta a reloadnu apache.

    Ale nechci :)

    před 11 lety
  31. adzio http://adzio.net #31

    avatar

    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í…

    před 11 lety
  32. Pachollini http://www.all-stars.cz/ #32

    U těch důležitých:
    scp user@server:www/web ./web-new
    mv web web-old; mv web-new web

    před 11 lety
  33. Jakub Vrána http://php.vrana.cz/ #33

    Já jsem si skript pro zpracování šablon upravil tak, že kompiluje až šablony, které jsou alespoň 2 –vteřiny– sekundy staré.

    před 11 lety
  34. Jan Tichý http://www.phpguru.cz/ #34

    avatar

    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.

    před 10 lety

Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.