通过Mono 在 Heroku 上运行 .NET 应用
中文原文:在 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应用三步曲
通过Mono 在 Heroku 上运行 .NET 应用的更多相关文章
- RazorEngine 3.3 在Mono 3.2上正常运行
RazorEngine 是一个简化的模板引擎基于微软新的Razor 解析引擎, Razor是在 ASP.NET MVC3 和 Web Pages中引入的.RazorEngine 提供了一个外包装和额外 ...
- Flask 教程 第十八章:Heroku上的部署
本文翻译自The Flask Mega-Tutorial Part XVIII: Deployment on Heroku 这是Flask Mega-Tutorial系列的第十八部分,我将在其中部署M ...
- CentOS上 Mono 3.2.8运行ASP.NET MVC4经验
周一到周三,折腾了两天半的时间,经历几次周折,在小蝶惊鸿的鼎力帮助下,终于在Mono 3.2.8上运行成功MVC4.在此总结经验如下: 系统平台的版本: CentOS 6.5 Mono 3.2.8 J ...
- Mono 4.0 Mac上运行asp.net mvc 5.2.3
Mono 4.0 已经发布,二进制包已经准备好,具体的发布说明参见:http://www.mono-project.com/docs/about-mono/releases/4.0.0/. 今天在Ma ...
- 不装mono,你的.NET程序照样可以在Linux上运行!
让.NET应用程序在linux上运行,目前通用的做法就是在Linux上安装mono,然后通过”mono your.exe“命令运行这个程序. 这种运行.net程序的办法有两个弱点,一个是需要客户机安装 ...
- 在传统.NET Framework 上运行ASP.NET Core项目
新的项目我们想用ASP.NET Core来开发,但是苦于我们历史的遗产很多,比如<使用 JavaScriptService 在.NET Core 里实现DES加密算法>,我们要估计等到.N ...
- Linux上运行NET
今天尝试了下Ubuntu上运行NET程序,按照 https://github.com/aspnet/Home 的指引,一步一步来: 1.安装DNVM(原名KVM) Linux控制台下输入 curl - ...
- [译]在Mac上运行ASP.NET 5
原文:http://stephenwalther.com/archive/2015/02/03/asp-net-5-and-angularjs-part-7-running-on-a-mac 这篇文章 ...
- 简单理解在Mac OS X上运行ASP.NET程序
运行ASP.NET程序的三要素: 1) CLR(.NET运行时) 2) KRE(ASP.NET运行时) 3) Web服务器 所以在Mac OS X上运行ASP.NET程序,就需要对应这三要素的东西: ...
随机推荐
- 配置android sdk 环境
1:下载adnroid sdk安装包 官方下载地址无法打开,没有vpn,使用下面这个地址下载,地址:http://www.android-studio.org/
- 学习ASP.NET Core, 怎能不了解请求处理管道[5]: 中间件注册可以除了可以使用Startup之外,还可以选择StartupFilter
中间件的注册除了可以借助Startup对象(DelegateStartup或者ConventionBasedStartup)来完成之外,也可以利用另一个叫做StartupFilter的对象来实现.所谓 ...
- redis 学习笔记(1)
redis持久化 snapshot数据快照(rdb) 这是一种定时将redis内存中的数据写入磁盘文件的一种方案,这样保留这一时刻redis中的数据镜像,用于意外回滚.redis的snapshot的格 ...
- Go web开发初探
2017年的第一篇博客,也是第一次写博客,写的不好,请各位见谅. 本人之前一直学习java.java web,最近开始学习Go语言,所以也想了解一下Go语言中web的开发方式以及运行机制. 在< ...
- ThinkPHP 模板substr的截取字符串函数
ThinkPHP 模板substr的截取字符串函数在Common/function.php加上以下代码 /** ** 截取中文字符串 **/ function msubstr($str, $start ...
- Android 解析XML文件和生成XML文件
解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...
- 安卓客户端a标签长按弹框提示解决办法
昨天工作时候发现一个bug,是关于a标签的,在安卓客户端中,如果是a标签的话,长按会出现一个弹框,如图所示 是因为安卓客户端的长按触发机制,以后进行wap端开发的时候,如果用到跳转页面尽量不要用a标签 ...
- Linux实战教学笔记05:远程SSH连接服务与基本排错(新手扫盲篇)
第五节 远程SSH连接服务与基本排错 标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 远程连接LInux系统管理 1.1 为什么要远程连接Linux系统 在实际的工作场景中,虚拟机界面或物理 ...
- 【原】npm 常用命令详解
今年上半年在学习gulp的使用,对npm的掌握是必不可少的,经常到npm官网查询文档让我感到不爽,还不如整理了一些常用的命令到自己博客上,于是根据自己的理解简单翻译过来,终于有点输出,想学习npm这块 ...
- 一步步学习javascript基础篇(9):ajax请求的回退
需求1: ajax异步请求 url标识请求参数(也就是说复制url在新页面打开也会是ajax后的效果) ajax异步请求没问题,问题一般出在刷新url后请求的数据没了,这就是因为url没有记录参数.如 ...