如何在 IIS 上設置 Mercurial 和 hgweb?


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

Mercurial wiki 上有這個“逐步”,但不是很好。
還有 thisthis,但同樣,我找不到好的領導步驟直到那些開始的地方。

我昨天剛安裝了一個新的 Mercurial 實例,這裡是 1.7 的更新說明:

  1. 安裝 Mercurial(這些說明在 1.7 中測試過)
  2. 安裝 Python(對於 Mercurial 1.7,您必須使用 x86 Python 2.6.6 版本)
  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/運行-mercurial-on-windows.html

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

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

  • Mercurial(我用的是 1.5 版)
  • Python 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 服務擴展文件夾。單擊“添加新的 Web 服務擴展”鏈接。擴展名應該是Python,需要的文件是c:\Python26\python.exe -u “%s” “%s”。確保新的擴展程序是“允許的”。

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

print '狀態:200 OK'
print '內容類型:文本/html'
打印

打印''
打印 ''
print '

有效!

' 打印 '' 打印 ''

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

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

接下來讓 hgwebdir 工作。

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

application = hgwebdir('c:\inetpub\wwwroot\hg\hgweb.config')
wsgicgi.launch(應用程序)
  • 將 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 的文件。

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

  • 編輯 hgweb.config,並粘貼以下內容:
[集合]
\\server\share$\Hg\ = \\server\share$\Hg\
[網絡]
允許推送 = *
push_ssl = 假

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

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

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

使用 mercurial 克隆 mercurial 存儲庫:

hg 克隆 https://www.mercurial-scm.org/repo/hg/

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

在過去一周左右的時間裡,我一直在為 mercurial 1.7.2 使用這個設置,為了讓它工作,我不得不做一些與上述文章不同的事情。

在這裡發帖是因為谷歌一直把我帶回這裡……

完整說明張貼在這裡

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

主要區別在於我必須執行 “pure python” 安裝 mercurial 否則它會抱怨缺少 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. 在 IIS 10.0 中將 Python 配置為這個新網站(或整個 Web 服務器,如果您願意)的 CGI 處理程序。您可以手動執行此操作,也可以在 web.config 文件中創建/添加以下內容:


    
        
    

  1. 在“hg”應用程序文件夾中創建一個類似於以下內容的 hgweb.cgi
#!/usr/bin/env python3
#
# 一個示例 hgweb CGI 腳本,根據需要進行編輯
# 參見 https://mercurial-scm.org/wiki/PublishingRepositories

# 要服務的 repo 或 hgweb 配置的路徑(請參閱 'hg help hgweb')
配置=“hgweb.config”

# 如果 Mercurial 沒有在系統範圍內安裝,請取消註釋並調整
# (從“hg debuginstall”查詢“已安裝模塊”路徑):
# 導入系統; sys.path.insert(0, "/path/to/python/lib")

# 如果發生錯誤,取消註釋以將 python 回溯發送到瀏覽器:
#導入cgitb; cgitb.enable()

從水銀進口需求進口

需求import.enable()
從 mercurial.hgweb 導入 hgweb、wsgicgi

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

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