Behandle mehrere Versionen in derselben URL

8

Ich versuche mehrere Versionen der gleichen Webanwendung zu bearbeiten, ähnlich wie Google bei einigen Produkten, bei denen Sie den Link "Neue Version ausprobieren" erhalten.

Ziel ist es, sowohl eine "stable" - als auch eine "beta" -Version der Webapp zu haben und die Benutzer die neuen Funktionen ausprobieren zu lassen, ohne sie (und ihre Bugs) zu erzwingen.

Nun wäre es sehr einfach, jede Version in einen eigenen Unterordner zu stellen, wie zB www.mywebapp.com/v1 und www.mywebapp.com/v2.

Ich möchte jedoch, dass dies für den Benutzer transparent ist und die URL der Webanwendung unverändert bleibt (z. B. www.mywebapp.com /).

Welche Version geladen werden muss, wird nach der Benutzeranmeldung serverseitig ermittelt (zB: aktive Version für den angegebenen Benutzer wird in der Datenbank gespeichert) und kann später geändert werden, wenn der Benutzer auf "die neue Version ausprobieren" klickt / "Zurück zur alten Version" -Links.

Auf der Serverseite muss ich mit MySQL, PHP und Apache auskommen.

Ich habe es schon geschafft, das zu erreichen, indem ich jede Version in einen eigenen Unterordner setze, dann Versionsinformationen in Cookies speicherte (vom Server bei jedem Login oder jeder Seite aktualisiert) und RewriteRules (rewriteRules) verwendete, um "Anfragen" von base / versionslose URL zum richtigen Unterordner. Wenn kein Cookie gesetzt ist, wird ein Standardordner durch eine Fallback RewriteRule ausgewählt.

Dieser Kludus funktioniert, fühlt sich aber extrem zerbrechlich an und belastet den Apache-Daemon zusätzlich. Daher frage ich hier, ob jemand einen besseren Weg kennt, dies zu tun.

Danke!

    
Sergio 10.08.2011, 11:43
quelle

7 Antworten

6

htaccess ermöglicht das Neuschreiben basierend auf dem Inhalt von Cookies . Da Apache AWESOME bei Redirects ist und PHP ausreichend ist, würde ich es so handhaben.

In diesem Beispiel wird getestet, ob ein Vers-Cookie vorhanden ist. Wenn das der Fall ist, fügt es 'vers =' + was auch immer in dem Vers-Cookie der Anfrage war hinzu.

%Vor%

(Dieses Beispiel finden Sie hier )

    
cwallenpoole 28.08.2011 02:57
quelle
2

Verwenden Sie eine einzelne RewriteRule, um alle -Anfragen an eine einzelne route.php -Datei im Stammordner Ihrer Website weiterzuleiten.

Die Datei route.php sollte wie folgt aussehen:

%Vor%

Dies ist der Grundriss dessen, was Sie in route.php tun sollten. Es gibt einige andere sicherheitsrelevante und technische Probleme, auf die Sie in dieser Datei achten sollten.

    
nobody 27.08.2011 09:35
quelle
2

Ich denke, ein besserer Weg in PHP wäre, einfach die Datenbank abzufragen, die gewünschte Version zu bekommen und dann include() it aus einem Unterordner. Auf diese Weise ist es für den Benutzer transparent.

Wenn Sie beispielsweise annehmen, dass der Benutzer sich für die neue Beta entschieden hat, speichern Sie seinen Eintrag in der Datenbank,

%Vor%

Und dann, wenn er auf die Seite zugreift, haben Sie etwas ähnliches:

%Vor%     
Madara Uchiha 27.08.2011 06:45
quelle
0

Obwohl es möglich ist, einen Routing-Mechanismus und Session-Informationen zu verwenden, um Regeln zu erstellen, würde ich Ihre aktuelle Lösung lieber behalten. Alles, was Sie tun würden, indem Sie es in PHP implementieren, ist, dass Sie die Last von der Apache2 (die bereits eine sehr schnelle Rewrite-Engine hat) in die PHP-Binärdatei schieben. Darüber hinaus riskieren Sie, dass Ihre Anwendung aufgrund von Inkompatibilitäten von Daten, Cookies und anderen sitzungsbasierten Variablen in störende Versionen gerät.

Andererseits haben Sie den Vorteil der Wiederverwendbarkeit von gemeinsamen Objekten wie Bibliotheken, Domänenmodellen, Data Mappern usw. Aber meiner Meinung nach belastet dieser Vorteil nicht die schlechtere Performance und das Interferenzrisiko.

In einem Satz glaube ich, dass Ihre derzeitige Lösung die beste ist.

    
Lars 27.08.2011 17:39
quelle
0

Laden Sie Ihre versionierte Seite / Webseiten in IFRAME und IFRAME src könnte "webapp.com/v2" ..

sein

Der Benutzer, der Ihre Adressleiste auswählt, liest also webapp.com..aber Ihre IFRAME-URL ändert sich je nach Version.

Es müssen keine Umschreibregeln geschrieben werden.

    
Rahul 31.08.2011 11:29
quelle
0

Das könnte helfen: Was ich seit einem Monat verwende, ist

  1. Halten Sie alle Dateien in der Datenbank (Pfad, Code, Version = Dezimal (3,1), Flag: stabil = 3 / lab = 2 / beta = 1 / alpha = 0 )

  2. .htaccess leitet alle nicht existierenden Dateien (leite nicht Bilder, css, js oder andere statische nicht versionierte Dateien um) intern zu loader.pm (für Sie loader.ph_) don Verwenden Sie nicht die gleiche Erweiterung wie Ihre anderen Dateien zur Unterscheidung

    %Vor%
  3. loader lädt die letzte stabile Version aus der Datenbank- oder Beta-Version, wenn keine stabile Version existiert.

    SELECT code, version, flag FROM table WHERE path = ? AND flag > 0 ORDER BY flag DESC, version DESC LIMIT 1 Zeige keine Alpha-Seiten, die sich in der Entwicklung befinden

    Ausgabe 404 Fehler, wenn keine Ergebnisse und

    Wenn die Version wie ?v=2.0 loader datei angegeben wird, wird eine andere Abfrage verwendet

    SELECT code, version, flag FROM table WHERE path = ? AND version <= ? ORDER BY flag DESC LIMIT 1

Annahmen:

  1. Ein Benutzer möchte entweder stabil oder aktuell ; Sie brauchen also nicht mehr als 2 Dateien pro Pfad; bis du alte Versionen für Vitrinen behalten willst. Wenn der Nutzer das Neueste wünscht, benutze .. ORDER BY version DESC, flag DESC, ..
  2. Der Benutzer interessiert sich nicht dafür, welche Version er ist, und statt die gleiche Version für die gesamte Website auf einmal einzustellen, setzen wir die Version jeder Datei einzeln ; So ist die Verfolgung der Entwicklung einfach.

Probleme:

  • Kein Index / Primärschlüssel
    • Sie müssen sicherstellen, dass Sie keine doppelten Einträge haben, es wird Ihre Website jedoch nicht beschädigen, aber es wird nicht gut aussehen;)
    • wenn die gleiche Beta & amp; Für eine Datei existiert eine stabile Version und Benutzer hat sich für die neueste Version (Beta) entschieden ; dann könnten Sie ihm versehentlich eine Beta-Datei anstelle einer stabilen Datei liefern.
  • Query-String-Variable ?v= ist reserviert zum Auswählen von Versionen, aber das ist in Ordnung; Sie können ?var= wählen
Atul Gupta 01.09.2011 11:43
quelle
0

Es gibt eine Cloud-Plattform, die dies bei der Bereitstellung automatisch erledigt. www.cyligent.com
Es ist nur eine Frage des Setzens eines Cookies, sobald die zwei Versionen bereitgestellt werden. Viel weniger Arbeit als einige der anderen gezeigten Antworten.
Vollständige Offenlegung: Ich arbeite für Cycligent.

    
David 02.04.2015 23:39
quelle

Tags und Links