Apache 2 + SVN

Fórumok

Apache 2 + SVN

Hozzászólások

sziasztok!

lenne egy kérdésem, sokat gugliztam meg rtfm-eltem, de nem találtam megoldást a problémámra!
tehát, egy weboldalt fejlesztek amiben a forráskövetést subversionnal oldom meg. namost az lenne a gondom, hogy ha frissítem az éles felületen a weboldal forrását [code:1:433d3fc55c]svn up[/code:1:433d3fc55c]-al, akkor a weboldal simán elérhető, holott ez nembiztos, hogy célszerű lenne minden esetben! lévén lehet, hogy olyan php filet frissítek ami összeakaszthatja az adott időpillanatban arrajáró látogatónál a megjelenést! a másik, hogy ilyenkor a módosítások áthúzása is időbe telhet, és ezen idő alatt azt szeretném elérni, hogy minden egyes hivatkozásra egy adott oldalt, vagy egy statikus sima html filet hozzon be (ami biztosan nem fog frissülni).

tehát pontosabban azt kellene megoldani, hogy míg az [code:1:433d3fc55c]svn up[/code:1:433d3fc55c] parancs fut, addig erre tekerődjön át az apache.
van erre valakinek valami nagyon szép ötlete???

azaz ne kelljen, manuálisan valahogy átkonfigolni az apache-t majd frissíteni, majd megint visszatenni a megfelelő configot.

1, killall -9 apache
2, /etc/init.d/apache start

:twisted:

[quote:fdbd7b37f4="pete"]1, killall -9 apache
2, /etc/init.d/apache start

hát ez valahogy nem a probléma megoldása ... ;)

Olyasmit tudnek javasolni, hogy $DocumentRoot esetleg lehetne symlink. Van ket konyvtar, az egyik, amelyikre epp mutat a symlink, azt bekenhagyod. Van a masik, amit frissitesz. Ha frissult, akkor symlink at, es frissited az elozot. Es akkor igy valtogatas a ketto kozott kb.

(Nalam valami hasonlo van megcsinalva, es egesz jol mukodik :)

[quote:4c5de610cc="algernon"]Olyasmit tudnek javasolni, hogy $DocumentRoot esetleg lehetne symlink. Van ket konyvtar, az egyik, amelyikre epp mutat a symlink, azt bekenhagyod. Van a masik, amit frissitesz. Ha frissult, akkor symlink at, es frissited az elozot. Es akkor igy valtogatas a ketto kozott kb.

(Nalam valami hasonlo van megcsinalva, es egesz jol mukodik :)

jólhangzik, de én valami szebbet szeretnék :))) nincsen ilyenekre valami f@sza megoldás alapból? pl apache nézné az adott könyvtárban, hogy a .svn-ben van-e valami lockshit (hirtelen nemtudom mit ír oda az svn updatekor), és ha ez megvan akkor máshonnan szedi a dolgokat, vagy alapból átteker máshová?

ha automatizalni szeretned a dolgot, akkor javaslom tanulmanyozd a repod /hooks alkonyvtarat (precommit/postcommit)

[quote:eb34f50e20="snq-"]ha automatizalni szeretned a dolgot, akkor javaslom tanulmanyozd a repod /hooks alkonyvtarat (precommit/postcommit)

ez okés, csak ez a directory csak az svn szerveren van, ami kiszolgálja a forrást, viszont az éles szerveren csak kliens van, és ponthogy az éles szerveren kellene muxania ...

bocs, sajat infrastrukturabol indultam ki.

ssh user@host command? :)

közben meg sikerült megoldanom ezt a problémát apache rewrite ruleokkal.
és tök szépen is meglehet csinálni, az adott oldal virtual host szekciójába valami hasonlót kell tenni:
[code:1:fcbe7e9687]RewriteEngine On
RewriteMap do-we-upgrading txt:/full/path/to/rewrite_map.txt
RewriteCond ${do-we-upgrading:is_up|no} =upgrading
RewriteCond %{REQUEST_URI} !^/under_construction.htm$
RewriteRule (.*) /under_construction.htm
[/code:1:fcbe7e9687]

és a rewrite_map.txt -ben egyetlen sort vettem fel:
[code:1:fcbe7e9687]is_up no
[/code:1:fcbe7e9687]
itt a lényeg az, hogy az apache minden lekéréskor megnézi, hogy ebben a fileban az is_up sorban milyen érték van és ha az érték upgrading akkor minden lekérést a /under_construction.htm -ból szedi ki (persze kivéve az /under_construction.htm fájlt). itt a /full/path/to/ természetesen a weboldal gyökerére kell, hogy mutasson! azaz a http://mydomain.hu/rewrite_map.txt címen el is érhető (kivéve, ha ezt külön meg nem tiltod!)

az oldal forrásának gyökerében pedig a saját upgrade scriptemet:
[code:1:fcbe7e9687]if [ -f rewrite_map.txt ] ; then
echo "is_up upgrading" > rewrite_map.txt;
fi
sleep 1
svn up
if [ -f rewrite_map.txt ] ; then
echo "is_up no" > rewrite_map.txt;
fi
[/code:1:fcbe7e9687]
futtatom le. ezt persze el lehet menteni egy külön shell scriptbe! így amikor éppen frissíteni kezdek, akkor az apache észreveszi, hogy upgrading és így áttekeri az összes lekérést. majd a végén visszaállítja a script is_up no -ra (persze akármi más is lehetne ami nem az upgrading szó). ezzel még lehetnek problémák, pl.: ki írhat a rewrite_map.txt -be satöbbi. de kezdetnek egy béta szájton már nemrossz ;) nyilván az /under_construction.htm -ba kell tenni az alap statikus szöveget (semmi külső hivatkozással), hogy éppen frissítünk. az apache doksija szerint pedig ez a megoldás nem lassítja le a szervert, mert első indításkor az adott RewriteMap -et betekeri a memóriába és csak akkor fér hozzá újból, ha az megváltozott.