Ibland löser man gamla olösta problem med lösningar på nya.
I veckan fixade jag så att vi kan stänga ned Menumo på ett par sekunder och skicka alla besökare till en tillfälligt avbrott-sida. Det är något som Capistrano, driftsättningsverktyget för Rails, gör så gott som rätt ur lådan. Om man kör Apache vill säga.
Det Capistrano gör är att skapa filen maintenance.html med information om när systemet beräknas vara uppe. Därefter använder man rewrite-regler i Apache som skickar all trafik till denna webbsida om filen finns.
Vi använder Lighttpd som har rewrite-regler men inte kan testa om filer existerar i filsystemet. En lösning är att ha en särskild konfigurationsfil för de tillfällen systemet är nere. Då skapar man reglerna after_disable_web och after_enable_web som startar om Lighty med respektive konfigurationsfil.
Vi har dock flera Rails-appar och vanliga webbsajter under Lighttpd. Så för att använda denna lösning var jag tvungen att flytta ut konfigurationen för Menumo till en separat fil som sedan inkluderas i huvudkonfigurationen. Sagt och gjort. Jag flyttade ut konfigurationen och skapade en ny konfigurationsfil för tillfälliga avbrott. För enkelhetens skull gjorde jag en symbolisk länk till endera av dessa för när systemet är uppe respektive nere.
Det var då jag insåg att detta löste ett gammalt problem.
Eller problem och problem. Jag var inte nöjd med att saker som hörde till specifika Rails-appar låg globalt i huvudkonfigurationen för Lighttpd. Saker som antalet FastCGI-processer, miljövariabler osv. Jag vet inte varför jag inte tänkte på att se efter om man kunde göra include. I stället funderade jag galet nog på att göra ett skript som klistrade ihop huvudkonfigurationen från delfiler som låg i respektive Rails-katalog.
Att jag inte tänkte längre än så kan ha berott på att det inte var ett problem vi prioriterade. Men då och då har jag grämt mig över det bökiga med denna lösning. Jag har dåligt tålamod med saker som inte finns där de hör hemma. Så när jag upptäckte att jag kunde lösa det här problemet infann sig ett behagligt lugn.
Det jag gjorde var:
- Att flytta den separata Lighttpd-konfigurationen för Menumo till katalogen
config/i appens katalog, tillsammans med konfigurationen för när appen är nere. - Vid
rake remote:disable_webskapar jag en symbolisk länklighttpd.conf.inctill filenmaint-lighttpd.conf.inc. - Och vid
rake remote:enable_webåterställer jag länken tillprod-lighttpd.conf.inc.
Rätt sak på rätt plats!
Ah, intressant. Kände inte till. Lighty (på TextDrive) var redan byggt med Lua. Dock verkar mod_magnet saknas.
Posted by: Peter | 2007.05.07 at 11:13
http://trac.lighttpd.net/trac/wiki/Docs%3AModMagnet#maintainance-pages
Om du kompilerar lighttpd med lua-stöd kan du använda ovandstående för att redirecta alla requests till en sida, om den finns.
Så det är ett löst problem redan ;)
Posted by: Johan | 2007.05.07 at 11:13