中文原文:在 Heroku 上運行 .NET 應用
自從加入了Heroku之后,我就想在這個平台上運行.NET程序。現在我很高興向大家宣布,我們已經有了一個可用的環境reasonably workable Mono buildpack。我的目標是能夠在Windows上使用Visual Studio創建一個ASP.NET MVC解決方案去創建一個Heroku的應用程序。它能夠使用git命令push Heroku,構建Heroku,應用部署在Mono和XSP網絡服務器。
開始
為了使用這個 .NET 編譯包,先創建一個 ASP.NET MVC 4 網站,然后啟用 NuGet 包倉庫。為了使這個解決方案能在 Mono 和 xbuild 中運行,我們需要進行一些處理:
- 在Web.config中添加System.Net.Http組件的重定向。
- 修復 NuGet.exe 全小寫路徑問題 (相信官方已經修復了,不過新版本還未發布出來)。
- 刪除全部 targetFramework 屬性。
- 修復 NuGet 中倉庫命令的奇怪參數問題 (我已經向 NuGet發了補丁)
至此,我們修正了 Mono, NuGet 和編譯包后,應該解決了那些障礙。
現在,我們將解決方案部署到 Heroku 里面去:
$ heroku create
$ heroku config:add BUILDPACK_URL=https://github.com/friism/heroku-buildpack-mono/
$ git push heroku master
我已經編寫了幾個可以運行的例子。 TestingMono 是一個相當簡單的的MVC網站,有一個后台線程每秒輸出一條消息。 為了運行這個后台線程,添加一個 Procfile 來啟動命令行線程:mono WorkerTest.exe。然后限制為1線程: heroku scale worker=1。另一個例子來自一個 AppHarbor 例子, 演示了 Heroku PostgreSQL 數據庫的 的簡單使用。 注意: connectionstring 是 從環境變量中讀取的, 而不是像其他.NET應用一樣從 Web.config 讀取。 你可以在 這里 看到運行的例子。
總結
能夠正常運行的:
- 在 Mono 3.0.11 和 XSP 3.0.11 中運行 ASP.NET MVC 4.
- NuGet 包倉庫 所以你不用手動添加你的依賴庫。
- 編譯輸出緩存及增量編譯,包括已下載的 NuGet 包的緩存。
- 運行 EXE文件以作為后台工作線程。
需要添加額外處理的:
- 向 Web.config 中的 appSettings 添加配置項。
- 使更多的 Visual Studio 模板可以使用。
- 尋找 XSP 的替代品 (如 nginx)。
請參考 README中的TODO. 歡迎大家參與到這個項目中來。我計划在將來再寫一篇 blog 來解析編譯包如何生成依賴庫 (這里的話只有 Mono and XSP)。
PS. 我正在努力使 Visual Basic 運行起來。
相關文章:
How to deploy Mono projects with Heroku
Heroku .NET buildpack update to Mono 3.2 and more
在Heroku上部署Java應用三步曲