我一直在尋找關於如何讓 hgweb 在 IIS 上工作的體面說明,但我沒有找到太多價值。
Mercurial wiki 上有這個“逐步”,但不是很好。
還有 this 和 this,但同樣,我找不到好的領導步驟直到那些開始的地方。
我昨天剛安裝了一個新的 Mercurial 實例,這裡是 1.7 的更新說明:
- 安裝 Mercurial(這些說明在 1.7 中測試過)
- 安裝 Python(對於 Mercurial 1.7,您必須使用 x86 Python 2.6.6 版本)
- 您需要從 Mercurial 源下載 hgweb.cgi 文件。您可以通過運行下載源代碼:
hg clone https://www.mercurial-scm.org/repo/hg/
-
創建一個文件夾,作為您的 Web 應用程序文件夾。您需要將三件事複製到此文件夾中:
- hgweb.cgi 文件
- “C:\Program Files\Mercurial”文件夾中 Library.zip 的內容
- “C:\Program Files\Mercurial”中的 Templates 文件夾
-
您需要確保在 IIS 中設置了 Python。
- 通過以下方式啟用 CGI:控制面板 -> 打開或關閉 Windows 功能 -> 角色 -> Web 服務器 (IIS) -> 添加角色服務 -> 檢查 CGI
- 在 IIS 中創建一個新網站,並確保物理路徑是您在上面創建的文件夾
- 在新網站的處理程序映射中,選擇“添加腳本映射”。輸入 *.cgi 作為請求路徑,輸入 c:\Python26\python.exe -u “%s” 作為可執行文件,輸入 Python為名稱。
-
您還需要創建一個名為“hgweb.config”的文件,其內容類似於以下內容。文件中的路徑必須是驅動器上要存儲 Mercurial 存儲庫的位置:
[收藏]
c:\Mercurial\repos = c:\Mercurial\repos -
編輯 hgweb.cgi 文件並將設置 hgweb.config 路徑的行更改為如下內容(無論 hgweb.config 文件在哪裡):
config = “C:\Mercurial\hgweb.config”
- 現在,打開瀏覽器並導航到 http://localhost/mercurial/hgweb.cgi (或您在 IIS 中設置的任何適當的 URL 路徑),您應該會看到 Mercurial Repositories 頁面。
另外,請查看 Jeremy Skinners 博客文章。它有點過時了,但有一些額外的好步驟,比如為更清晰的 URL 設置 URL 重寫。
自 Mercurial 1.5.2 發布以來,這些教程似乎並不完全正確。一方面,hgwebdir.cgi 已被刪除,現在替換為 hgweb.cgi。
最適合我的說明位於 eworldui.net:
這些說明適用於 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
以下是我在為在 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/test.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。以下是我為使其正常工作所做的工作:
-
安裝 Python 2.7,在我的例子中是 python-2.7.18.amd64.msi。我假設它安裝在 C:\Python27 中。確保將 python 添加到您的路徑並安裝了 pip。
-
在命令行使用 pip 將 Mercurial 安裝為模塊:
pip install mercurial
-
在默認網站下添加一個名為“hg”的新應用程序並將其指向您要使用的目錄。
-
在 IIS 10.0 中將 Python 配置為這個新網站(或整個 Web 服務器,如果您願意)的 CGI 處理程序。您可以手動執行此操作,也可以在 web.config 文件中創建/添加以下內容:
- 在“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(應用程序)
- 在“hg”應用程序文件夾中創建 hgweb.config 文件並將其指向您的存儲庫,如下所示:
[集合]
C:\Web\www\hg\repos\ = C:\Web\www\hg\repos\
- 導航到 http://localhost/hg/hgweb.cgi 並享受吧!
您可以嘗試 HgLab。這不完全是 hgwebdir;相反,它是一個純託管的 Mercurial 實現,帶有推拉服務器和存儲庫瀏覽器。