Wie richte ich Mercurial und hgweb auf IIS ein?


73

Ich habe überall nach anständigen Anweisungen gesucht, wie man hgweb mit IIS zum Laufen bringt, aber ich habe nicht viel Wert gefunden.

Es gibt dieses "Schritt für Schritt" im Mercurial-Wiki, aber es ist nicht sehr gut. Es gibt auch dies und das , aber ich kann auch hier keine guten Schritte finden, um dorthin zu gelangen, wo diese anfangen.


Beginnen Sie mit den Anweisungen im Wiki und sagen Sie dann, wo Sie auf Probleme stoßen. Wenn Sie es zum Laufen bringen, können Sie das Wiki korrigieren.
Matthew Flaschen

3
Das Wiki ist falsch für meine Windows-Installation. Es gibt keine hgwebdir.cgi. Außerdem sagt es Ihnen nicht, wo Sie es bekommen, wo Sie es ablegen sollen usw. Mercurial fehlt wirklich ein guter Leitfaden für IIS, und ich hatte gehofft, dass StackOverflow einspringen könnte.
Kevin Berridge

2
@ Kevin Berridge - Unter vampirebasic.blogspot.com/2009/06/… gibt es eine exemplarische Vorgehensweise für Windows. Dies hat bei mir funktioniert.
Peter Bernier


@Firegarden Dieser Link funktioniert nicht mehr
David Sykes

Antworten:


49

Ich musste gestern nur eine neue Mercurial-Instanz installieren. Hier sind die aktualisierten Anweisungen für 1.7:

  1. Installieren Sie Mercurial (diese Anweisungen wurden mit 1.7 getestet)
  2. Installieren Sie Python (für Mercurial 1.7 müssen Sie die x86-Version von Python 2.6.6 verwenden)
  3. Sie müssen die Datei hgweb.cgi von der Mercurial-Quelle herunterladen. Sie können die Quelle herunterladen, indem Sie Folgendes ausführen:hg clone https://www.mercurial-scm.org/repo/hg/
  4. Erstellen Sie einen Ordner, der Ihr Webanwendungsordner sein wird. Sie müssen drei Dinge in diesen Ordner kopieren:

    • Die Datei hgweb.cgi
    • Der Inhalt der Library.zip aus Ihrem Ordner "C: \ Programme \ Mercurial"
    • Der Ordner "Vorlagen" aus "C: \ Programme \ Mercurial"
  5. Sie müssen sicherstellen, dass Python in IIS eingerichtet ist.

    • Aktivieren Sie CGI über Folgendes: Systemsteuerung -> Windows-Funktionen aktivieren oder deaktivieren -> Rollen -> Webserver (IIS) -> Rollendienste hinzufügen -> CGI überprüfen
    • Erstellen Sie eine neue Website in IIS und stellen Sie sicher, dass der physische Pfad der oben erstellte Ordner ist
    • Wählen Sie in den Handlerzuordnungen für die neue Website "Skriptzuordnung hinzufügen" aus. Geben Sie * .cgi als Anforderungspfad ein, c: \ Python26 \ python.exe -u "% s" für die ausführbare Datei und Python als Name.
  6. Sie müssen auch eine Datei mit dem Namen "hgweb.config" mit ähnlichen Inhalten wie unten erstellen. Der Pfad in der Datei muss der Speicherort auf Ihrem Laufwerk sein, an dem Sie die Mercurial-Repositorys speichern möchten:

    [Sammlungen]
    c: \ Mercurial \ repos = c: \ Mercurial \ repos

  7. Bearbeiten Sie die Datei hgweb.cgi und ändern Sie die Zeile, in der der Pfad zu Ihrer Datei hgweb.config festgelegt wird, wie folgt (unabhängig davon, wo sich die Datei hgweb.config befindet):

    config = "C: \ Mercurial \ hgweb.config"

  8. Öffnen Sie nun einen Browser und navigieren Sie zu http: //localhost/mercurial/hgweb.cgi (oder dem entsprechenden URL-Pfad, den Sie in IIS eingerichtet haben). Die Seite Mercurial Repositories sollte angezeigt werden .

Schauen Sie sich auch den Blog-Beitrag von Jeremy Skinners an . Es ist etwas veraltet, hat aber einige besonders nette Schritte wie das Einrichten des erneuten Schreibens von URLs für sauberere URLs.


Ich habe diese Anweisungen verwendet, um Mercurial und IIS unter XP (Professional) einzurichten. Der Index wird angezeigt, aber wenn ich auf einen der Repository-Links klicke, wird ein 404-Fehler angezeigt. Irgendwelche Vorschläge?
Brad Bruce

3
Fand es!!!! Beim Einrichten der .cgi-Zuordnung sollte der ausführbare Eintrag c: \ Python25 \ python.exe -u "% s" lauten und sicherstellen, dass die Datei nicht überprüft ist !!!!!!
Brad Bruce

4
Diese Anweisungen sind jetzt etwas veraltet. Weitere aktualisierte Anweisungen finden Sie in Kens Antwort: stackoverflow.com/questions/818571/…
firefly

Können Sie Schritte zum Umgehen des von IIS festgelegten Upload-Limits von 30 MB einschließen? Ich habe versucht Einstellung beide maxAllowedContentLengthund maxRequestLengthaber weder scheinen eine Wirkung zu haben!
Jocull

34

Es scheint, dass diese Tutorials seit der Veröffentlichung von Mercurial 1.5.2 nicht genau richtig funktionieren. Zum einen wurde hgwebdir.cgi entfernt und jetzt durch hgweb.cgi ersetzt.

Die Anweisungen, die für mich am besten funktionierten, finden Sie auf eworldui.net :

http://www.eworldui.net/blog/post/2010/04/08/Setting-up-Mercurial-server-in-IIS7-using-a-ISAPI-module.aspx

Diese Anweisungen sind für IIS 7 oder höher gedacht. Wenn Sie dies auf IIS 6 einrichten, habe ich ähnliche Anweisungen für Win2k3 und IIS 6.0 geschrieben:

http://partialclass.blogspot.com/2010/05/setting-up-mercurial-server-on-win2k3.html

UPDATE: Kurz nachdem dies funktioniert hatte, erfuhr ich, dass BitBucket sein Preisschema geändert hat, um kostenloses, unbegrenztes, privates Hosting anzubieten: https://bitbucket.org/ . Ich hätte mich sofort dafür entschieden, als ich ursprünglich an diesem Projekt arbeitete.


1
Ich habe ursprünglich versucht, die Dinge mit Jeremy Skinners Tutorial zu konfigurieren, und bin auf Probleme gestoßen, bei denen hgwebdir.cgi entfernt wurde. Mit dem IIS7-Tutorial konnte ich die Dinge mit Komplikationen einrichten. Vielen Dank!
Feuerfliege

Ausgezeichnet - danke für den Hinweis auf diese sehr nützlichen Referenzen, Ken P.
Ken

12

Ich fand, dass der Blog-Beitrag bei Vampire Basic ein guter Anfang war, aber er ging nicht annähernd genug ins Detail für das, wonach ich suchte.

Ich habe einen 4-teiligen Blog-Beitrag dazu verfasst, in dem Sie mit IIS von Grund auf neu arbeiten können, einschließlich Active Directory-Integration, Einrichten von Sicherheitsberechtigungen für Push / Pull, Anpassen der Vorlage. Ich würde ihn hier reproduzieren, aber es ist ziemlich Es war langwierig, dass Mercurial wirklich für das Hosting unter Linux / Apache entwickelt wurde:

http://www.endswithsaurus.com/2010/05/setting-up-and-configuring-mercurial-in.html


Wow - ich wünschte, ich könnte dies nach oben bringen! Sehr gut gemacht. Gibt es einen Grund, warum Sie nicht einfach das URL Rewrite-Modul von iis.net/download/URLRewrite verwendet haben ?
Goyuix

@Goyuix - Danke, es gibt zwei Gründe, warum ich das nicht benutzt habe: 1. Ich hatte keine Ahnung, dass es existiert und niemand hat mich in diese Richtung gelenkt. 2. Die geringe Menge an Recherchen, die ich durchgeführt habe, ergab, dass ISAPI Rewrite für den Zweck ausreichte, für den ich es verwendet habe. Vielen Dank für den Hinweis, ich werde es überprüfen.
BenAlabaster

@Goyuix - Die Informationen, auf die Sie mich hingewiesen haben, deuten darauf hin, dass IIS URL Rewrite für IIS 7 ist. Ist dies für IIS 6 verfügbar? Mein Blog-Beitrag war auf IIS 6 ausgerichtet, da ich ihn derzeit verwende.
BenAlabaster

1
Dies ist eine großartige Reihe von Beiträgen. Sie sollten auf jeden Fall ein Follow-up für IIS 7
BobTheBuilder

1
@BobTheBuilder - Ich plane es, aber ich muss Zeit finden, um meinen Server auf Win2K8 zu aktualisieren. Im Moment bin ich auf Win2K3, was für meine Bedürfnisse ausreicht und ziemlich solide war, also hatte ich es Kein Upgrade erforderlich.
BenAlabaster


11

Im Folgenden ist aufgeführt, was ich getan habe, nachdem ich einige Nachforschungen angestellt hatte, um das Setup von hgwebdir.cgi auf IIS6 zu erhalten. Es basiert auf folgenden Websites:

Sie müssen Folgendes auf dem Server installieren:

  • Mercurial (ich habe Version 1.5 verwendet)
  • Python 2.6. Die Version von Python hängt von der installierten Version von Mercurial ab. Mercurial 1.5 verwendet Python 2.6. Installieren Sie x86, auch wenn Sie x64 ausführen.

Die Schritte für mich waren:

  • Erstellen Sie ein Verzeichnis für die Website. Ich habe c: \ inetpub \ wwwroot \ hg verwendet.
  • Klicken Sie in IIS mit der rechten Maustaste auf den Ordner für hg, wählen Sie Eigenschaften aus und wählen Sie die Registerkarte Basisverzeichnis.
  • Klicken Sie auf die Schaltfläche Anwendung erstellen. Setzen Sie die Ausführungsberechtigungen auf "Skripte".
  • Klicken Sie weiterhin auf der Registerkarte Basisverzeichnis auf die Schaltfläche Konfiguration. Klicken Sie im Popup "Anwendungskonfiguration" auf die Schaltfläche Hinzufügen, um eine Anwendungserweiterung hinzuzufügen. Die ausführbare Datei lautet c: \ Python26 \ python.exe -u "% s" "% s". Die Erweiterung ist .cgi. Setzen Sie die "Verben" auf "Limit auf: GET, HEAD, POST". Überprüfen Sie sowohl die Skript-Engine als auch die vorhandene Datei.
  • Klicken Sie auf der Registerkarte Verzeichnissicherheit im Abschnitt Authentifizierung und Zugriffssteuerung auf die Schaltfläche Bearbeiten. Deaktivieren Sie alle Authentifizierungsmethoden und aktivieren Sie die Methode "Grundlegende Authentifizierung". Legen Sie die Standarddomäne fest, wenn Sie Ihre Active Directory-Domäne verwenden möchten.
  • Klicken Sie in IIS im linken Bereich auf den Ordner Web Service Extensions. Klicken Sie auf den Link "Neue Webdiensterweiterung hinzufügen". Der Name der Erweiterung sollte Python sein. Die erforderliche Datei lautet c: \ Python26 \ python.exe -u "% s" "% s". Stellen Sie sicher, dass die neue Erweiterung "Zulässig" ist.

Jetzt ist ein guter Zeitpunkt, um zu testen, ob Python funktioniert. Erstellen Sie eine Datei in Ihrem neuen Hg-Ordner mit dem Namen test.cgi. Fügen Sie den folgenden Python-Code ein:

print 'Status: 200 OK'
print 'Content-type: text/html'
print

print '<html><head>'
print ''
print '<h1>It works!</h1>'
print ''
print ''

Öffnen Sie den Browser für Ihre Site, z. B. http: //localhost/hg/test.cgi

Sie sollten sehen "Es funktioniert!" im Browser.

Als nächstes bringen wir das hgwebdir zum Laufen.

  • Löschen Sie test.cgi
  • Klonen Sie das HG-Repo in ein neues Verzeichnis: https://www.mercurial-scm.org/repo/hg/
  • Kopieren Sie hgwebdir.cgi aus dem geklonten hg-Repo in Ihr Webverzeichnis: c: \ inetpub \ wwwroot \ hg \
  • Bearbeiten Sie die Datei und ändern Sie sie
application = hgwebdir('hgweb.config')
wsgicgi.launch(application)

zu

application = hgwebdir('c:\inetpub\wwwroot\hg\hgweb.config')
wsgicgi.launch(application)
  • Entpacken Sie die Datei Library.zip im Mercurial-Verzeichnis c: \ Programme \ Mercurial \ in Ihr Webverzeichnis c: \ inetpub \ wwwroot \ hg \
  • Kopieren Sie das Vorlagenverzeichnis von c: \ Programme \ Mercurial \ templates \ nach c: \ inetpub \ wwwroot \ hg \ templates \
  • Erstellen Sie eine Datei mit dem Namen hgweb.config in Ihrem Webverzeichnis.

Jetzt ist ein guter Zeitpunkt, um es auszuprobieren. Gehen Sie im Browser zur folgenden URL : http: //localhost/hg/hgwebdir.cgi

  • Bearbeiten Sie die Datei hgweb.config und fügen Sie Folgendes ein:
[collections]
\\server\share$\Hg\ = \\server\share$\Hg\
[web]
allow_push = *
push_ssl = false

Dies sind alle meine Einstellungen, zum Beispiel haben wir unsere Repos in Unterverzeichnissen unter \\ server \ share $ \ Hg. Die Web-App wird unter den Berechtigungen des angemeldeten Benutzers über den Browser ausgeführt, sodass er Lese- / Schreibberechtigungen für die Freigabe benötigt.

Der letzte Schritt besteht darin, lange Verbindungen zuzulassen, die beim ersten Klonen eines Repos auftreten können. Führen Sie den folgenden Befehl aus, um das Zeitlimit auf 50 Minuten zu erhöhen:

cd \inetpub\AdminScripts\
cscript adsutil.vbs GET /W3SVC/CGITimeout 
cscript adsutil.vbs SET /W3SVC/CGITimeout 3000

+1 Großartige Arbeit, für Mercurial 1.7
SwDevMan81

3

Verwenden Sie mercurial, um das mercurial-Repository zu klonen:

hg clone https://www.mercurial-scm.org/repo/hg/

Sie finden hgwebdir.cgi auf der obersten Ebene. Es sollte wie jedes andere CGI-Skript installiert werden.


2

Ich habe in der letzten Woche mit diesem Setup für mercurial 1.7.2 gekämpft. Ich musste die Dinge etwas anders machen als in den obigen Artikeln, damit es funktioniert.

Hier posten, weil Google mich immer wieder hierher zurückgebracht hat ....

Vollständige Anweisungen finden Sie hier

Ich folgte einer Kombination dieser Anweisungen und dieser (in der Quelle)

Die Hauptunterschiede sind, dass ich die "reine Python" -Installation von mercurial durchführen musste, sonst würde es sich über fehlende DLLs beschweren, und ich fand es wichtig, die "Python-Installer" für pywin und isapi-wsgi zu verwenden. (Vielleicht ist dies für erfahrene Python-Entwickler offensichtlich, aber ich bin ein Python-Neuling, also waren es Neuigkeiten für mich)

Hoffe, das hilft jemandem und ich erfinde nicht nur Sachen (ich könnte, wie gesagt, Python-Neuling sein)




-1

Sie können HgLab ausprobieren . Dies ist nicht gerade hgwebdir; Vielmehr handelt es sich um eine rein verwaltete Mercurial-Implementierung mit Push- und Pull-Server und Repository-Browser.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.