2008-09-26 12 views
10

Mein Ubuntu-Server hat Apache und Subversion installiert. Ich benutze diesen Server nur zu Testzwecken als Staging-Server. Ich verwende Apache, um die Webanwendung zu hosten, und Subversion, um versionierte Kopien des Quellcodes zu behalten.Wie kann ich Post-Commit-Hooks verwenden, um festgeschriebene Dateien von SVN in ein Webverzeichnis zu kopieren?

Mein aktueller Workflow:

  • Änderungen an einer Datei
  • Commit die Datei in das Subversion-Repository
  • Laden Sie die Datei neu über SFTP auf den Apache öffentlichen Verzeichnis
  • Sehen Sie sich die Änderungen in mein web browser

Ich wäre viel glücklicher, wenn mein Workflow so wäre:

  • Änderungen an einer Datei
  • Commit die Datei in das Subversion-Repository
  • Im Hintergrund stellt Subversion eine Kopie der engagierten Datei in das Apache öffentlichen Verzeichnis
  • Sehen Sie sich die Änderungen in mein web browser

Ich habe sehr wenig Server Admin Erfahrung, und jede Hilfe oder Zeiger sind willkommen. Ich habe gehört, dass Post-Commit-Hooks das sind, was ich brauche, und dass ich dafür Bash-Skripte schreiben kann, aber ich bin mir nicht sicher, wo ich anfangen soll und habe nach ziemlich viel Googeln wirklich nichts gefunden.

Vielen Dank!

Antwort

0

Es kann getan werden, aber automatisch drückt jeder auf die Produktion Website verpflichten, ist nicht immer eine gute Idee. Manchmal gibt es andere Änderungen, die mitgehen müssen, und die Website zu brechen, weil der neue Code vorhanden ist, aber das Datenbankschema noch nicht aktualisiert wurde, ist nur peinlich.

Was ich tendiere, ist stattdessen, dass der Server eine Kopie von svn auscheckt, und sobald ich mit allem fertig bin, was passieren muss, mache ich ein svn-Update darauf.

Aber wenn Sie wirklich wollten, können Sie Befehle in den Post-Commit-Trigger setzen, der alles automatisch für Sie tun wird. Dies könnte die Ausführung eines Migrationsskripts auf dem Server umfassen (falls einer für diese Änderung vorhanden ist), um alle nicht erforderlichen Codeänderungen zu berücksichtigen.

+0

Meine Anwendung überprüft das Datenbankschema bei der Ausführung und zeigt eine Seite "nicht sofort verfügbar" an, wenn etwas nicht in Ordnung ist. Nicht zu erwähnen, dass dies ein Staging-Server ist, also ist es der Ort, an dem die Dinge schief gehen sollen;). Danke für die Antwort. – rmh

0

Ich denke, die echte, übergeordnete Frage, die Sie sich fragen sollten --- die Sie möglicherweise bereits gefragt haben, natürlich --- ist das: "Wie kann ich meinen Code am einfachsten vor der Bereitstellung testen?"

Ich denke, eine gute Antwort ist, Apache auf Ihrer Entwicklungsbox zu installieren und es als Ihr eigener Benutzer mit webroot und/oder cgi Pfad bei /home/richardhenry/src/mywebsite (oder wo immer Sie Ihren Code auschecken) auszuführen.

Auf diese Weise können Sie Ihren Code testen, ohne zu committen. Infolgedessen werden Sie Ihren Stamm nicht mit zerbrochenen oder nutzlosen Verpflichtungen verunreinigen.Im Allgemeinen neigt das Halten unabhängiger Dinge dazu, eine gute Idee (TM) zu sein. Alternativ können Sie den Webserver mit rsync gegen Ihr Arbeitsverzeichnis synchronisieren oder ein Skript schreiben, das Ihre Dateien aus der Entwicklungsumgebung auf Ihren Staging-Server überträgt und eine Makefile-Regel hinzufügt, die Ihr Skript ausführt (oder rsync aufruft)). Wenn Sie möchten, wirklich Phantasie, verwenden Sie inotify oder eine andere Datei Benachrichtigung Monitor, um Ihr Skript automatisch auszuführen.