2009-04-06 4 views
5

In der Vergangenheit habe ich immer alle meine Seiten live bearbeitet; war nicht allzu besorgt über meine 2 Besucher, die eine Fehlermeldung sehen.Wie sollte ich meine Entwicklungsumgebung einrichten, um Code in eine Live-Website zu übertragen?

Allerdings kann es einen Tag kommen, wenn ich mehr als 2 Besucher bekomme. Was wäre der beste Ansatz, um meine Änderungen zu testen und alle Änderungen gleichzeitig live zu schalten?

Sollte ich jemals eine einzelne Datei kopieren und in einen Unterordner einfügen und diese bearbeiten, dann kopieren Sie sie zurück, wenn ich fertig bin? Was ist, wenn ich vollständige URLs in meinem Code habe (sie werden brechen, wenn ich sie verschiebe)? Vielleicht kann ich einige .htaccess-Hacker benutzen, um das zu umgehen? Was ist mit Datenbank-Dummy-Testdaten? Sollte ich alle meine MySQL-Tabellen täuschen und stattdessen auf diese verweisen?

Ich benutze CakePHP für das bestimmte Projekt, das ich besorgt bin, aber ich bin neugierig zu wissen, was Ansätze Menschen sowohl mit Cake (welche kann haben Tools, um damit zu helfen?), Und ohne eine grundlegende Struktur.


Ich habe viele Empfehlungen für SVN bekommen, was toll klingt, aber leider ist mein Gastgeber nicht unterstützen: \

+0

Sie müssen nicht SVN auf Ihrer Live-Website ausgeführt werden. Führen Sie es lokal auf Ihrem Entwicklungscomputer aus und kopieren Sie die geänderten Dateien einfach, nachdem Sie Ihre Änderungen lokal vorgenommen (und getestet) haben. – RodeoClown

+0

+1 RodeoClown - und noch besser, wenn Sie SVN lokal ausführen und es auf einer öffentlichen IP verfügbar machen können und Ihr ISP den SVN-Client unterstützt, ist das Ausrollen Ihrer Updates so einfach wie der Befehl 'svn up' – mozboz

+0

Sie können konfigurieren SVN, um auch Dateien hochzuladen? Das ist ziemlich nett. Ich muss mehr darüber nachdenken, danke Jungs – mpen

Antwort

18

Das Beste, was Sie tun können, ist eine Staging-Umgebung zu schaffen in dem Sie Ihre Änderungen testen. Die Staging-Umgebung (im Idealfall) ist ein vollständiges funktionierendes Duplikat Ihres Produktionssystems. Dies verhindert, dass Sie viele Kopfschmerzen und unbeabsichtigte Produktionsabstürze erleben.

Wenn Sie an einem kleinen Projekt arbeiten, ist es das Beste, Ihre Remote-Site lokal (einschließlich der Datenbank) neu zu erstellen. Codieren Sie alle Ihre Änderungen dort. Wenn Sie mit der Fertigstellung zufrieden sind, stellen Sie die Änderungen auf einmal auf Ihrer Remote-Site bereit.

+0

Ich werde das zweite. Es hat sich als äußerst wertvoll erwiesen, besonders wenn man mit Kunden arbeitet und ihnen eine Veränderung zeigen kann, bevor sie live geht. – jerebear

+0

Es mag auch ein Aufwand sein, jedes Mal zu kopieren und zu kopieren, aber es ist viel schlimmer, einen Fehler zu machen, damit Ihre Besucher es sehen können. – jerebear

+0

Es ist weniger mühsam, wenn Sie eine Versionsverwaltungssoftware verwenden, sodass der Bereitstellungsprozess nur Ihren bewährten Arbeitscode festlegt und ihn aus dem Repository der Live-Instanz aktualisiert. – chaos

3

Ich habe auf meinem Laptop einen Entwicklungsserver eingerichtet, der meinen Webserver so genau wie möglich dupliziert (Serversoftware und Konfiguration, Betriebssystem, Dateisystemlayout, installierte Software, etc.). So kann ich den Code auf meinen Laptop schreiben und teste es lokal; Sobald ich die Dinge dort funktioniert habe, kopiere ich es auf den Server. Manchmal treten einige Probleme auf, weil die beiden Computer leicht voneinander abweichen, aber diese werden immer schnell gelöst (und falls nicht, habe ich meine Website in einem SVN-Repository, so dass ich sie jederzeit wiederherstellen kann).

Auf einer anderen Website, die ich gepflegt habe, habe ich eine etwas andere Taktik verwendet: Ich habe einen URL-Pfad innerhalb der Site festgelegt, der eine Entwicklungsversion der Basis-Site wäre. Das heißt, http://www.example.com/devweb würde normalerweise spiegeln http://www.example.com, http://www.example.com/devweb/foo/bar.php würde Spiegel http://www.example.com/foo/bar.php, etc. Ich erstellte einen Ordner devweb unter dem Dokument root, aber anstatt alle Dateien zu kopieren, konfigurierte ich den Server so, dass, wenn eine angeforderte Datei nicht in der /devweb Verzeichnis, würde es unter dem Dokument root suchen. Das war ein fragileres Setup als ein separater Entwicklungsserver.

+0

Warum war es zerbrechlicher? Das klingt nach einer cleveren Lösung. Wäre viel einfacher einzurichten als versuchen, meinen Server zu duplizieren. – mpen

+0

Im Grunde genommen war es ein wenig trickreich, PHP dazu zu bringen, eine separate Konfigurationsdatei für die Entwicklungssite zu lesen und sie mit der Konfigurationsdatei der Live-Site zu verbinden. Außerdem waren wir darauf beschränkt, relative URLs für Bilder, Stylesheets, Intranet-Links usw. zu verwenden. –

5

Ich würde empfehlen, Ihre Website Code unter Vollversion Kontrolle (Git oder Subversion). Testen und verwalten Sie Ihre Quelle auf einem separaten, privaten Sandbox-Server und sehen Sie sich die neueste stabile Version auf der Produktionsstätte an, wann immer sie zur Veröffentlichung bereit ist.

Für die Datenbankunterstützung, auch für kleine Projekte, verwalte ich separate Entwicklungs- und Produktionsdatenbanken. Sie können das SQL, das zum Generieren und Verwalten Ihres Schemas verwendet wird, und das Testen oder Bootstrapping von Daten zusammen mit dem Rest Ihrer Site versionieren. Verwalten Sie die von Ihrer Site verwendete Datenbankumgebung über eine einfach zu trennende Konfigurationsdatei und weisen Sie Ihre Versionskontrolllösung an, sie zu ignorieren.

Absolute URLs werden ein Problem sein. Wenn Sie sie nicht vermeiden können, können Sie den Hostnamen immer in der gleichen Konfigurationsdatei speichern und nach Bedarf lesen ... außer natürlich in Stylesheets und Javascript-Ressourcen. Meine zweite Wahl für dieses Problem wäre URL-Rewriting-Magie oder seine Entsprechung in der Entwicklung Server, und meine letzte Wahl würde nur mit der /etc/hosts Datei irren, wenn ich Funktionen testen wollte, die von ihnen abhängen.

+0

+1. Durch die Verwendung eines Versionsverwaltungsprogramms wird so viel Zeit für die Migration von Änderungen von der Entwicklung in die Produktion eingespart. –

2

Ich habe eine Reihe von Websites in CakePHP geschrieben. Ich entwickle und teste auf meinem lokalen Rechner, benutze die Datenbank auf meinem Produktionsserver (ich habe nur einen MySQL-Login, der für meine statische IP-Adresse funktioniert).

Der gesamte Code in Subversion überprüft, und ich habe dann eine kontinuierliche Integration Server - Hudson:

https://hudson.dev.java.net/

Dies baut und setzt mein Projekt auf der Produktionsmaschine. Es prüft nur den Code in Subversion für ein bestimmtes Projekt und führt dann ein einfaches Skript zu SSH/kopiert die Dateien in den Staging- oder Produktionsstandort auf dem Server. Sie können dies entweder als manuellen Prozess einrichten (den ich derzeit habe) oder Sie können dies einrichten, so dass es nach dem Einchecken von Code bereitgestellt wird. Es gibt viele andere CI-Tools, die dafür eingerichtet werden können (haben Sie eine schau auch auf Xinc).

http://code.google.com/p/xinc/

Wie für absolute URLs können Sie immer Setup etwas in Ihrer Host-Datei, anstatt die Seite lokal auf Ihrem Computer zu lösen. Es funktioniert für mich, nur nicht vergessen, es zu nehmen danach:)

Hoffnung, dass ...

2

hilft ich eine Version von config/database.php haben, die PHP-Server-Variable „SERVER-Namen verwendet "um festzustellen, auf welchem ​​System die App läuft. Dann, wenn ich meinen Git Repo über mein Heim-System, Entwicklungs-Site (die die gleichen Spezifikationen wie die Live-Maschine teilt), und die Live-Maschine, die sie alle mit ihren jeweiligen Datenbanken verbinden klonen.

Ich klebte hier, aber ich glaube auch, dass es auf Thebakery verfügbar ist.

http://pastebin.com/f1a701145

+0

Oh! Das ist eine ziemlich clevere Lösung. Danke für das Teilen :) – mpen

Verwandte Themen