簡體   English   中英

如何在 IIS 上設置 Mercurial 和 hgweb?

[英]How do I set up Mercurial and hgweb on IIS?

我一直在尋找有關如何讓 hgweb 在 IIS 上工作的體面說明,但我沒有發現太多價值。

Mercurial wiki 上有這個“循序漸進” ,但不是很好。 還有thisthis ,但同樣,我找不到好的步驟來引導那些開始的地方。

我昨天只需要安裝一個新的 Mercurial 實例,這里是 1.7 的更新說明:

  1. 安裝 Mercurial (這些說明在 1.7 中測試過)
  2. 安裝 Python (對於 Mercurial 1.7,必須使用 Python 2.6.6 的 x86 版本)
  3. 您需要從 Mercurial 源下載 hgweb.cgi 文件。 您可以通過運行下載源: hg clone https://www.mercurial-scm.org/repo/hg/
  4. 創建一個文件夾,作為您的 Web 應用程序文件夾。 您需要將三件事復制到此文件夾中:

    • hgweb.cgi 文件
    • “C:\\Program Files\\Mercurial”文件夾中 Library.zip 的內容
    • “C:\\Program Files\\Mercurial”中的 Templates 文件夾
  5. 您需要確保在 IIS 中設置了 Python。

    • 通過以下方式啟用 CGI:控制面板 -> 打開或關閉 Windows 功能 -> 角色 -> Web 服務器 (IIS) -> 添加角色服務 -> 檢查 CGI
    • 在IIS中新建一個網站,並確保物理路徑是你上面創建的文件夾
    • 在新網站的處理程序映射中,選擇“添加腳本映射”。 為請求路徑輸入*.cgi ,為可執行文件輸入c:\\Python26\\python.exe -u "%s" ,為名稱輸入Python
  6. 您還需要創建一個名為“hgweb.config”的文件,其內容類似於以下內容。 文件中的路徑必須是您要存儲 Mercurial 存儲庫的驅動器位置:

    [收藏]
    c:\\Mercurial\\repos = c:\\Mercurial\\repos

  7. 編輯 hgweb.cgi 文件並將設置 hgweb.config 路徑的行更改為如下所示(無論 hgweb.config 文件在哪里):

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

  8. 現在,打開瀏覽器並導航到http://localhost/mercurial/hgweb.cgi (或您在 IIS 中設置的任何適當的 URL 路徑),您應該會看到 Mercurial Repositories 頁面。

另外,請查看Jeremy Skinners 博客文章 它有點過時,但有一些額外的好步驟,例如為更干凈的 URL 設置 URL 重寫。

似乎自從 Mercurial 1.5.2 發布以來,這些教程並不完全正確。 一方面,hgwebdir.cgi 已被刪除,現在替換為 hgweb.cgi。

最適合我的說明在eworldui.net 上

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

這些說明適用於 IIS 7 或更高版本。 如果您在 IIS 6 上進行設置,我編寫了針對 Win2k3 和 IIS 6.0 的類似說明:

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

更新:在完成這項工作后不久,我了解到 BitBucket 改變了他們的定價方案,提供免費、無限制的私人托管: https : //bitbucket.org/ 當我最初從事這個項目時,我會立即選擇它。

我發現Vampire Basic上的博客文章是一個好的開始,但它沒有詳細說明我所追求的內容。

我寫了一篇關於此的 4 部分博客文章,讓您從頭開始使用 IIS,包括 Active Directory 集成、設置推/拉安全權限、自定義模板,我會在此處復制它,但它相當啰嗦的是,Mercurial 真正設計為托管在 Linux/Apache 上:

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

這里有一個相當不錯和全面的教程: http : //vampirebasic.blogspot.com/2009/06/running-mercurial-on-windows.html

以下是我在為在 IIS6 上設置 hgwebdir.cgi 進行了大量研究后所做的工作。 它基於以下站點:

您需要在服務器上安裝以下內容:

  • Mercurial(我使用的是 1.5 版)
  • 蟒蛇 2.6。 Python 的版本取決於安裝的 Mercurial 版本。 Mercurial 1.5 使用 Python 2.6。 即使您運行的是 x64,也要安裝 x86。

我的步驟是:

  • 為網站創建一個目錄。 我使用了 c:\\inetpub\\wwwroot\\hg。
  • 在 IIS 中,右鍵單擊 hg 文件夾,選擇屬性,選擇主目錄選項卡。
  • 單擊創建應用程序按鈕。 將執行權限設置為“腳本”。
  • 仍然在主目錄選項卡中,單擊配置按鈕。 在“應用程序配置”彈出窗口中,單擊“添加”按鈕以添加應用程序擴展。 可執行文件是 c:\\Python26\\python.exe -u "%s" "%s"。 擴展名為 .cgi。 將“動詞”設置為“限制為:GET、HEAD、POST”。 檢查腳本引擎並驗證文件是否存在。
  • 在目錄安全選項卡中,單擊身份驗證和訪問控制部分中的編輯按鈕。 取消選中所有身份驗證方法,然后選中“基本身份驗證”方法。 如果您喜歡 Active Directory 域,請設置默認域。
  • 在 IIS 中,單擊左側面板上的 Web Service Extensions 文件夾。 單擊“添加新的 Web 服務擴展”鏈接。 擴展名應該是 Python,需要的文件是 c:\\Python26\\python.exe -u "%s" "%s"。 確保新擴展名是“允許的”。

現在是測試 Python 是否正常工作的好時機。 在新的 Hg 文件夾中創建一個名為 test.cgi 的文件。 粘貼以下python代碼:

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

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

打開瀏覽器訪問您的站點,例如http://localhost/hg/te​​st.cgi

您應該會看到“它有效!” 在瀏覽器中。

接下來讓我們讓 hgwebdir 工作。

  • 刪除test.cgi
  • 將 hg 存儲庫克隆到新目錄: https://www.mercurial-scm.org/repo/hg/ : https://www.mercurial-scm.org/repo/hg/
  • 將 hgwebdir.cgi 復制到您的 Web 目錄:c:\\inetpub\\wwwroot\\hg\\ 從克隆的 hg 存儲庫
  • 編輯文件並更改
application = hgwebdir('hgweb.config') wsgicgi.launch(application)

application = hgwebdir('c:\\inetpub\\wwwroot\\hg\\hgweb.config') wsgicgi.launch(application)
  • 將 Mercurial 目錄 c:\\Program Files\\Mercurial\\ 中的 Library.zip 文件解壓到您的 Web 目錄 c:\\inetpub\\wwwroot\\hg\\
  • 將模板目錄從 c:\\Program Files\\Mercurial\\templates\\ 復制到 c:\\inetpub\\wwwroot\\hg\\templates\\
  • 在您的 Web 目錄中創建一個名為 hgweb.config 的文件。

現在是測試它的好時機。 在瀏覽器中訪問以下 URL, http://localhost/hg/hgwebdir.cgi

  • 編輯 hgweb.config,並粘貼以下內容:
 [collections] \\\\server\\share$\\Hg\\ = \\\\server\\share$\\Hg\\ [web] allow_push = * push_ssl = false

這些都是我的偏好,例如我們在 \\\\server\\share$\\Hg 的子目錄中有我們的存儲庫。 Web 應用程序將通過瀏覽器在登錄用戶的權限下運行,因此他們需要對共享的讀/寫權限。

最后一步是允許長連接,這在您第一次克隆存儲庫時可能發生。 運行以下命令將超時增加到 50 分鍾:

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

使用 mercurial 克隆 mercurial 倉庫:

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

您會在頂層找到 hgwebdir.cgi。 它應該像任何其他 cgi 腳本一樣安裝。

在過去一周左右的時間里,我一直在與 mercurial 1.7.2 的這個設置作斗爭,為了讓它工作,我必須做一些與上述文章略有不同的事情。

在這里發帖是因為谷歌一直把我帶回這里......

完整說明張貼在這里

我遵循了這些說明這些(在源代碼中)的組合

主要區別在於我必須對mercurial進行“純 python”安裝,否則它會抱怨缺少 dll,而且我發現使用 pywin 和 isapi-wsgi 的“python 安裝程序”很重要。 (也許這對於有經驗的 Python 開發人員來說是顯而易見的,但我是一個 Python 新手,所以這對我來說是新聞)

希望這對某人有所幫助,而且我不僅僅是在編造東西(我可能是,就像我說的,python 新手)

hg 紅皮書包含一些比我在其他地方看到的更好的一般說明。 它們不是特定於 IIS 的,但它們非常好:

http://hgbook.red-bean.com/read/collaborating-with-other-people.html#sec:collab:cgi

我遇到了“...無法加載模塊...”類型錯誤,經過一些閱讀后,我的關鍵是忽略 Mercurial 文件夾中的 Library.zip 文件,而是使用 C:\\ Program Files (x86)\\TortoiseHg 文件夾。

我在本指南中發現的第 6 條提示:

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

希望這可以幫助某人...

我知道這是一個老問題,但我真的很難在 Server 2019 和 IIS 10 上安裝 Hg。這是我為使其工作所做的工作:

  1. 安裝Python 2.7 ,在我的例子中是python-2.7.18.amd64.msi 我假設它安裝在 C:\\Python27 中。 確保將 python 添加到您的路徑並安裝了 pip。

  2. 在命令行中使用 pip 將 Mercurial 安裝為模塊:

pip install mercurial
  1. 默認網站下添加一個名為“hg”的新應用程序,並將其指向您要使用的目錄。

  2. 將 Python 配置為 IIS 10.0 中的 CGI 處理程序,用於此新網站(或整個 Web 服務器,如果您願意)。 您可以手動執行此操作或創建/添加以下內容到您的web.config文件:

<system.webServer>
    <handlers accessPolicy="Read, Script">
        <add name="Python 2.7" path="*.cgi" verb="*" modules="CgiModule" scriptProcessor="C:\Python27\python.exe -u &quot;%s&quot;" resourceType="File" />
    </handlers>
</system.webServer>
  1. 在“hg”應用程序文件夾中,創建一個類似於以下內容的hgweb.cgi
#!/usr/bin/env python3
#
# An example hgweb CGI script, edit as necessary
# See also https://mercurial-scm.org/wiki/PublishingRepositories

# Path to repo or hgweb config to serve (see 'hg help hgweb')
config = "hgweb.config"

# Uncomment and adjust if Mercurial is not installed system-wide
# (consult "installed modules" path from 'hg debuginstall'):
# import sys; sys.path.insert(0, "/path/to/python/lib")

# Uncomment to send python tracebacks to the browser if an error occurs:
#import cgitb; cgitb.enable()

from mercurial import demandimport

demandimport.enable()
from mercurial.hgweb import hgweb, wsgicgi

application = hgweb(config)
wsgicgi.launch(application)
  1. 在“hg”應用程序文件夾中,創建hgweb.config文件並將其指向您的存儲庫,如下所示:
[collections]
C:\Web\www\hg\repos\ = C:\Web\www\hg\repos\
  1. 導航到 http://localhost/hg/hgweb.cgi 並享受!

你可以試試HgLab 這不完全是 hgwebdir; 相反,它是一個帶有推拉服務器和存儲庫瀏覽器的純托管 Mercurial 實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM