Fórumok
Olyan Nginx modult keresek, ami minden requestnél betölt a kiszolgálandó fájl mellől (opcionálisan a szülő könyvtárakból is) egy kulcs-érték párokat tartalmazó fájlt, pl. template.ini.
és az ebben lévő stringeket
A) vagy betölti $tmpl_* nginx válozókba, amiket SSI-vel fel tudok használni (<!--# echo var="tmpl_title" -->),
B) vagy filtereli a http választ kicserélve a "{kulcs}", vagy "<!--% kulcs -->" előforulásokat a template.ini-ből betöltött értékekkel.
Fastcgi használata nélkül.
Hozzászólások
up
Ez a
template.ini
egy nginx-konfig lenne?nem.
ez egy teljesen user defined fájl lenne a webroot alatt, amit minden lekéréskor betöltene (persze cache-elheti amíg a file mtime nem változik) az nginx.
SSI-vel meg lehetne oldani, de nem elég felhasználóbarát és én szeretnék egy olyan definíciós fájlt szeretnék, ami sallangoktól mentes, pl. ini formátum.
page.html:
<!--# include file="_templates.html" wait="yes" -->
<html>
<head>
<title><!--# echo var="title" -->
...
_templates.html:
<!--# set var="title" value="Hello World" -->
...
ezzel az a baj, hogy a page.html ejelén be kell hivatkozni a _templates.html-t és a templates fájlban SSI tag-ekkel kell megadni a válozókat, valamint nem csak változódefiníciókat lehet benne megadni.
~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack
Értem. Csak abban nem vagyok biztos, hogy ez a webszerver feladata lenne.
De egy ötlet, hogy valami használható(nak tűnő)t is mondjak: http://wiki.nginx.org/HttpLuaModule
nginxnek van vmi parametere amivel dinamikusan tud includeolando config filet gyartani indulaskor.
erről nem tudok. arra gondolsz hogy indításkor generál konfig fájlt amit asztán betölt?
mindegy is, ez nem lenne megoldás, mert egy nginx konfigban bármi lehet, nem csak változók; nekem minden lekérésnél fel kéne dolgozni a template változókat tartalmazó fájlt - nem megengedhető egy template változó cseréjekor az egész webszervert reload-olni.
~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack
igazad van, én se mondanám teljes egészében webszerver feladatnak.
tipikusan valamilyen cgi backendek szokták végezni.
viszont az nginx SSI-je már elég hasonló képesség, továbbá van jópár filter modulja is (subs, addition), amik kimondottan a response átírására valóak. szerintem egy template kezelés is elfér ezek mellé.
lua-t nézegettem, de csak meghatározott válozókat tud beállítani (set_by_lua), így nem definiálhatok akármennyi, akármilyen nevű template változót; vagy csinálhatok olyan hogy az egész content-et a lua állítja össze (content_by_lua), ezesetben ugyan kedvemre filter-elhetem a kért tartalmat, de elveszlik az nginx saját kiszolgálási mechnizmusa (hozzáférés ellenőrzés, header-ek manipulálása, magának a fájlnak a megtalálása, try_files, stb).
~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack
van egy ilyen direktíva is: body_filter_by_lua
efölött átsiklottam. még akár jó is lehet!
kár hogy a perl modulban nincs filter lehetőség - abban könnyebben megírnám az ini felolvasást és string kicserélgetést, mint lua-ban.
~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack
Nem olyan veszes a lua, par ora alatt belejossz. Elonye, hogy nagyon gyors, es nagyon jol van az nginx-szel integralva.
sikerült összedobni a lua kódot.
egyetlen hátránya, hogy header_filter_by_lua -ban törölni kell a Content-Length -et, mert változhat a content mérete; amit végülis kibirok, mert kis html fájloknál általában nincs rá szükség.
egyelőre csak az aktuális kvt-ból veszi a template.ini-t, nem ellenőrzi a parentokat. és <!--{title}--> formájú stringeket cserél ki.
kell arra számítanom, hogy ha a body_filter_by_lua_file darabonként kapja meg a body-t, akkor egy ilyen template válozót kettévághat két chunk határa?
~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack
:)
http://pastebin.com/GBx5bX1N
ilyen, bár a 31. sor regexp-je elég csúnya lett
~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack
Nem másolod be inkább ide? Csak az utókor végett...
inifile modul innen van: http://santos.nfshost.com/inifile.html
~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack
Kíváncsi lennék, teljesítményben ez mit dob rajta. Statikus fájl vs a te template megoldásod vs php cgi mérést tudsz csinálni?
--
nincs php cgi ott ahol ezt használom, de egész biztosan állítom, hogy az nginx-be ágyazott lua gyorsabb kell h legyen, mint egy php cgi-os megoldás. kezdve ott, hogy a php minden forrás fájlt minden request-nél beolvas, a lua kód meg memóriában van (abból gondolom, mert az nginxt reload-olni kell ha változtatok a lua kódon). a folyamat más részeiben nem látok jelentős teljesítménykülönbségre lehetőséget: fájlművelet, sztringművelet... esetleg a regexp implementáción múlhat valami.
~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack