Hallo,
ich programmiere Webseiten, die von einem embedded System gehostet
werden. Dort laeuft ein embedded Webserver.
Da diese Entwicklung langsam geht, will ich zu Entwicklungszwecken den
embedded Webserver mit Apache simulieren.
Das funktioniert, nur an ein paar JS-Stellen muss der Code geaendert
werden.
Dort habe ich
1
window.location.host.indexOf("localhost")==-1
Abfragen.
Mir waere es lieber, ich koennte diese Stellen unveraendert lassen und
von apache mittels eines selbstgeschriebenen Skriptes (sed) modifizieren
lassen.
Weiss jemand, ob man das machen kann? Dass apache statische Webseiten
modifiziert, bevor sie zum Browser geschickt werden?
Gruss, Lovos
> Abfragen.> Mir waere es lieber, ich koennte diese Stellen unveraendert lassen
Vorschläge:
1) Alles was sich zwischen Entwicklungs- und Produktionsumgebung
unterscheidet kommt in eine eigene Datei. Von der Datei gibts dann zwei
Versionen - eine fürs Entwickeln, die andere für die Produktion.
2) Vielleicht reicht ja eine Parametrisierung? if
(window.location.host.indexOf(config.hostName) == -1) { ... }
3) Oder eine Abstraktion?
if (perform_some_test()) { ... }
4) Preprozessor (cpp)/Makroprozessor (m4)/Search-Replace-Tool (sed) über
die Seiten laufen lassen, bevor sie in der Entwicklungs- oder
Produktionsumgebung aufgespielt werden.
Stephan
Hallo,
(bin gerade nicht eingeloggt)
Danke fuer die Vorschlaege, aber ich will den Code unveraendert lassen,
da ich in einem Team mit CVS arbeite und viele Dateien der Kollegen
antasten muss.
Deshalb versuche ich eine Loesung, wo der Code on the fly fuer Apache
angepasst wird.
Juergen G.
Lovos schrieb:> Danke fuer die Vorschlaege, aber ich will den Code unveraendert lassen,> da ich in einem Team mit CVS arbeite und viele Dateien der Kollegen> antasten muss.> Deshalb versuche ich eine Loesung, wo der Code on the fly fuer Apache> angepasst wird.
Vorschlag: Skript schreiben, dass die Seiten modifiziert und sie so
ablegt, das Apache sie ausliefert. Das wäre quasi Variante 4.
Warum reicht das nicht, d.h. warum muss es on-the-fly sein?
Hallo Stephan,
dieses Skript habe ich schon geschrieben:
Sed-Befehle erweitern den Code, dass er sowohl mit Apache als auch mit
embedded Webserver funktioniert. (siehe oben)
Solange ich an den Dateien nichts aendern muss ist es ja gut.
Muss ich was aendern und einchecken, dann sind die SED-Aenderungen auch
in CVS, und das sollen sie nicht.
D.h. ich muss die Apache-Version-Ergaenzung wieder rueckgaengig machen
(original File drueberkopieren), Aenderungen machen, einchecken, und
dann wieder sed-Skript ausfuehren. Das ist zu umstaendlich.
Deshalb waere mir eine on-the-fly Loesung lieber.
Aber offensichtlich bietet Apache das nicht. Habe ja auch lange
erfologlos gegoogelt.
Hi,
nur mal so als völllig unausgegorene Idee:
Lass die Seite vor dem Laden im Apache durch ein dort liegendes
liegendes php-Script laufen.
Das soll die Änderungen vornehmen (statisch mit Speichern oder nicht ist
egal) und dann siehst du es von dort aus.
Wenn du dann deine embedded-Version bearbeitest und das php wieder
öffnest kommt wieder die Konvertierung uswusw. Du öffnest quasi immer
nur as php-Script.
Hab jetzt nicht länger drüber nachgedacht, glaube aber, dass das möglich
sein sollte.
jan
Lovos schrieb:> Hallo Stephan,> dieses Skript habe ich schon geschrieben:> Sed-Befehle erweitern den Code, dass er sowohl mit Apache als auch mit> embedded Webserver funktioniert. (siehe oben)> Solange ich an den Dateien nichts aendern muss ist es ja gut.> Muss ich was aendern und einchecken, dann sind die SED-Aenderungen auch> in CVS, und das sollen sie nicht.
Nee, so hab ich das nicht gemeint. Mein Vorschlag war so zu verstehen:
Du machst cvs co in ein Arbeitsverzeichis - nennen wir es mal $WORKDIR.
Dann gibts ja noch das Verzeichnis, aus dem Apache die Dateien liefert:
$WWWDIR. Nun hast Du ein Skript, dass Dir die Seiten anpasst und dabei
von $WORKDIR nach $WWWDIR kopiert.
Dein Workflow ist also folgender:
1. cd $WORKDIR && cvs co ...
2. Seiten ändern
3. Mittels Skript Seiten automatisch anpassen und von $WORKDIR nach
$WWWDIR kopieren lassen
4. Testen mit Apache
5. Wiederhole ab 2.
> D.h. ich muss die Apache-Version-Ergaenzung wieder rueckgaengig machen> (original File drueberkopieren), Aenderungen machen, einchecken, und> dann wieder sed-Skript ausfuehren. Das ist zu umstaendlich.
Ja, ist es, deswegen trennt man das Ganze halt in ein Arbeitsverzeichnis
$WORKDIR und das $WWWDIR, wobei $WORKDIR != $WWWDIR.
> Deshalb waere mir eine on-the-fly Loesung lieber.> Aber offensichtlich bietet Apache das nicht. Habe ja auch lange> erfologlos gegoogelt.
Ich hab noch eine Idee: Skript (z.B. CGI) + mod_rewrite. mod_rewrite
wird dann so eingerichtet, dass Abfragen auf
http:// testhost/my/web/page.html
umgeschrieben werden auf
http://
testhost/cgi-bin/myFancySedScriptWrappedIn.cgi?target=my/web/page.html
Dann gehts auch on-the-fly.
Stephan
Stephan M. schrieb:> Dein Workflow ist also folgender:>> 1. cd $WORKDIR && cvs co ...> 2. Seiten ändern
...damit meinte ich, dass Du hier diejenigen Anpassungen an den Seiten
vornehmen kannst, die später ins CVS zurück sollen...
> 3. Mittels Skript Seiten automatisch anpassen und von $WORKDIR nach> $WWWDIR kopieren lassen> 4. Testen mit Apache> 5. Wiederhole ab 2.
>Ich hab noch eine Idee: Skript (z.B. CGI) + mod_rewrite. mod_rewrite>wird dann so eingerichtet, dass Abfragen auf
Danke. Die Idee war super. Damit habe ich das urspruengliche Problem
anders geloest, damit ich gar keine unterschiedlichen HTML Dateien mehr
brauche. Das On-the-fly Thema hat sich damit erledigt :-)
Hallo,
das einzige unschoene an der Sache ist, dass die .htaccess datei (fuer
die rewrite-Rules) im Verzeichniss der HTML-Dateien steht.
Dadurch, dass dort auch die CVS-Dateien stehen, die ebenso nicht auf den
Embedded-Server hochgeladen werden sollen, ist das nicht ganz so
schlimm.
Aber vielleicht gibt es eine Moeglichkeit, die Rewrite-Rules woanders
abzulegen?
Gruss
Lovos schrieb:> Aber vielleicht gibt es eine Moeglichkeit, die Rewrite-Rules woanders> abzulegen?
Ja, in den globalen Konfigurationsdateien von Apache. Wo genau was hin
muss ist Abhängig von Deiner Distribution bzw. Apache-Installation.
Stephan