一、 Heroku

简单来讲,Heroku是一个支持多种语言、极易部署、多价位可免费的 Pass 平台,通过 Buildpack 搭建语言运行环境,

默认内建的大部分是 Web 开发中较为常见的语言,包括但不限于 RubyNode.jsPythonPHPJavaGo 等;

除此之外,还可自建 buildpack 来支持其他语言。

对于 ASP.NET 5 来说,未来应该也会默认集成,现在就只能手动设置了。

Heroku 写的 ASP.NET 5 Buildpack 的地址: https://github.com/heroku/dotnet-buildpack 。但是,目前还有一些问题,不会通过,后面会提到。

→_→私货,自己改动的 Buildpack https://github.com/noliar/dotnet-buildpack

二、 ASP.NET 5 Buildpack 的前期准备

2.1 安装 Heroku Toolbelt 并使用

为啥要安装这个呢,主要还是现在的 dashboard 里没有设置 buildpack 的地方。

-=-这其实应该改善下。

2.2 安装完成后,登录 Heroku 账号

$ heroku login
Enter your Heroku credentials.
Email: adam@example.com
Password (typing will be hidden):
Authentication successful.

2.3 设置 Buildpack

根据文档介绍,通常我们有两种方式来设置。

2.3.1 新建 App 时设置

heroku create appname --buildpack https://github.com/noliar/dotnet-buildpack.git

2.3.2 已有 App 设置

heroku buildpacks:set https://github.com/noliar/dotnet-buildpack.git -a appname

2.4 设置完成后,就可以随意 git push 代码了

当然你也可以通过 dashboard 直接和 GitHub、Dropbox 连接,然后 Deploy。

三、 ASP.NET 5 Buildpack 分析与说明

3.1 Buildpack 结构分析

3.1.1 .profile.d/buildpack-boot.sh

主要是运行环境的一些默认配置

3.1.2 bin/util

一些小套件集合

3.1.3 bin/detect

检验该项目是否为 ASP.NET 5 应用,也就是检测是否存在 project.json,因为 ASP.NET 5 的项目结构一般为

src/ProjectName/*,所以设置的是最多查找三层目录。

3.1.4 bin/compile

看名字就知道这个是编译用的,主要涉及到的是安装 libuvmonodnx-mono 等,编译运行应用。

为啥不选用dnx-coreclr,主要是由于 dnu 命令在*nix coreclr下,有 BUG,最近的 dev 好像修复了,没试过。

3.2 基本的使用说明

在项目根目录下新建一个 .deployment 文件,

并设置 project 值。当然你也可以直接设置 Heroku App 的环境变量 PROJECT,只不过我觉得这样改起来比较麻烦。

[config]
project = src/ProjectName

还要注意的是,别忘了在 project.json 中,添加 Kestrel (beta6)的引用,我就不说我卡在这里多少次了- -||

3.3 我的修改版本

目前的修改主要有以下几点:

3.3.1 设置 dnx 版本是稳定版(stable)还是日建版(unstable)

这个功能原版以前是没有的,最近才增加了相似的功能,实现方法也有所不同,当然共同点是默认的为 unstable。错了,Heroku 的现在默认是 stable 的,我的目前默认是 unstable 的。再改一下,默认目前都是 stable 的。

Heroku 写的那个目前是通过设置环境变量 UNSTABLE_TOOLCHAIN 值来判断的;

我自己原先是通过 .deployment 设置 stabletrue 来控制的,现在增加了环境变量的判断。

同时,我的修改还可以通过在 .deployment 中设置 stable 值为 false,来表示 dnx 的版本为 unstable。

(其实,本来是想改成设置 unstable 的值,不过为了不破坏我之前设置的项目,就还是设置 stable 值吧 >3< )

[config]
project = src/ProjectName
stable = false

3.3.2 修复一些错误

比如缺少的命令,bowergulp等,移除多余的包时的命令错误。

说实话,我都怀疑他本身就没测试过能不能成功运行,

或者只是测试了以前的版本 beta4 之类的,最新 beta6 的默认模板一般都是 gulp,没添加 grunt。

原版已修复缺少的命令,但还是没改 rm 多余的包的写法。 (9/14)

3.3.3 更改 Procfile 默认命令

这样的更改是把决定权给予项目所有者,主要是为了适应 ASP.NET 5 API 的不断更改。

主要也就是这种情况:stable beta6 的 Server 通常是 Kestrel,而 dev 的 Server 改成了 Microsoft.AspNet.Server.Kestrel

但这样的更改,导致的是 project.json 中必须要有名为 kestrel 的命令,忘了的话就会失败。

原版现已做此更改。 (9/14)→_→不过PR啥的从不处理,什么鬼。

3.3.4 从 global.json 读取 sdk 版本 (updated 9/5)

目前是从根目录下读取 global.json,默认为 latest

3.3.5 更新 dnu publish 命令 (updated 9/5)

当不指定 runtime 时,默认会发布依赖的所有运行时版本;当指定 runtime 时,除自身程序编写的依赖,只会发布兼容当前 runtime 的版本

3.3.6 增加 CoreCLR 版 (updated 9/16)

coreclr版在beta7出来时就一直在搞,就是没成功,实在不知道为啥,测试了二三十次,dnu publish 一直都会卡在bower install 那不动,

问题我在LinuxMint本地搞他就没有卡啊,难道是因为本地是NodeJs 4?

本来一直怀疑是它那个广告分析的提醒,所以花了好久这块,各种方法试了遍,他就是不行。

反正一股脑地全上,把NodeJs版本改成4.0,把CI设成true,不知道因为啥,现在是 bower 不卡了。

但是很坑爹的是,编译通过了,但是运行报错,报的啥错呢?说啥不能识别 appbase 路径,我真的很崩溃,

但是更坑人的是我在后面添加了&>err.log,他竟然运行不报错,也没生成这个文件,这是什么鬼,理解不能。

反正我是不动了,试了几次都能运行了,怪了。

不过需要注意的是,目前 coreclr 我没合并到 master 分支,所以必须重新设置 buildpack。

```
heroku buildpacks:set https://github.com/noliar/dotnet-buildpack.git#coreclr -a appname
```

已合并到master分支,若需使用,只需在`.deployment`中将`coreclr`设为`true`。(9/17)

不过老实说,DNX CoreCLR beta7 的 BUG 还是有点多,只能指定兼容的 framework,如果project.json中有dnx451,dnx452

之类不兼容的framework,dnu publish 生成时会报错。如果第一个 framework 就是不兼容,dnu restore 就直接报错了。

四、 最后

因为某些原因,heroku 有时会连不上→_→不知道绑域名会不会好点,早知道现在绑域名要先认证的话,

就不删除以前的域名绑定了- -

我一般就拿来测试和放 demo 的 =。=

Heroku 与 ASP.NET 5的更多相关文章

  1. 在Heroku上免费部署ASP.NET Core(使用Docker和CircleCI)

    创建 ASP.NET Core应用 使用命令行即可创建一个模板项目 dotnet new webapi 完整代码 https://github.com/Ibro/AspNetCoreHerokuDoc ...

  2. 通过Mono 在 Heroku 上运行 .NET 应用

    英文原文:Running .NET on Heroku 中文原文:在 Heroku 上运行 .NET 应用 自从加入了Heroku之后,我就想在这个平台上运行.NET程序.现在我很高兴向大家宣布,我们 ...

  3. GitHub自动化部署(CD) asp.net core 5.0 项目(免费空间)

    这里我简单介绍一下使用Github自动化部署自己项目到Heroku云服务器上,Heroku竟然是一个很非常老牌的云平台服务商,竟然还没听说过,网上一查2010被Salesforce收购,网上有很多关于 ...

  4. ASP.NET Core 之 Identity 入门(一)

    前言 在 ASP.NET Core 中,仍然沿用了 ASP.NET里面的 Identity 组件库,负责对用户的身份进行认证,总体来说的话,没有MVC 5 里面那么复杂,因为在MVC 5里面引入了OW ...

  5. Asp.Net Mvc 使用WebUploader 多图片上传

    来博客园有一个月了,哈哈.在这里学到了很多东西.今天也来试着分享一下学到的东西.希望能和大家做朋友共同进步. 最近由于项目需要上传多张图片,对于我这只菜鸟来说,以前上传图片都是直接拖得控件啊,而且还是 ...

  6. ASP.NET Core 中的那些认证中间件及一些重要知识点

    前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...

  7. ASP.NET Core应用的错误处理[3]:ExceptionHandlerMiddleware中间件如何呈现“定制化错误页面”

    DeveloperExceptionPageMiddleware中间件利用呈现出来的错误页面实现抛出异常和当前请求的详细信息以辅助开发人员更好地进行纠错诊断工作,而ExceptionHandlerMi ...

  8. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  9. ASP.NET_各个币种之间的汇率转换(实时)使用Yahoo汇率。

    近期开发支付平台的时候有运用到各国的实时汇率之间的转换问题,于是在往上找了很多相关资料,以下就是一些参考网址: 1.提供API接口的网站:https://www.showapi.com:这个网站有提供 ...

随机推荐

  1. android开发系列之由ContentValues看到的

    这本篇博客里面我想重点来分析一下ContentValues的源码以及它里面涉及到的继承接口Parcelabel,还有HashMap的源码. 相信使用过android里面数据库操作的朋友对于Conten ...

  2. wordpress 为文章内容添加自动过滤,例如为出站链接添加nofollow,也可以将淘宝客链接转换。。

    做seo的都明白,反向链接对与网站的优化有着很重要的作用,是搜索引擎给网站排名的一个重要因素.为了添加反向链接,SEO作弊者会在论坛和博客等大量发布带无关链接的 内容.这些垃圾链接的存在给搜索引擎对网 ...

  3. 27.some company's Spi Flash chip replace altera epcsxxx

    由于altera公司的epcsxxx芯片比较贵,所以一般用其它公司的spi flash芯片代替也可以.据AlteraFAE描述:“EPCS器件也是选用某家公司的SPIFlash,只是中间经过Alter ...

  4. shell if判断的种类

    if [ $# != 1 ] ; then echo "USAGE: $0 TABNAME" echo " e.g.: $0 CDR_CALL_20040701" ...

  5. loadView, viewDidLoad 快速使用

    一  loadView: 在每次访问 UIViewController时,且其 view = nil 时,会调用这个方法,所以大家在开发中想自己设置 view 的可以用这个方法,在这个方法中自定义 v ...

  6. nodejs tools

    1.supervisor npm install supervisor -g supervisor app.js cd public cd bin supervisor www http://www. ...

  7. 谈谈 Repository、IUnitOfWork 和 IDbContext 的实践

    谈谈 Repository.IUnitOfWork 和 IDbContext 的实践 上一篇:<DDD 领域驱动设计-谈谈 Repository.IUnitOfWork 和 IDbContext ...

  8. Web前端一种动态样式语言-- Less

    变量 变量允许我们单独定义一系列通用的样式,然后在需要的时候去调用.所以在做全局样式调整的时候我们可能只需要修改几行代码就可以了. // LESS @color: #4D926F; #header { ...

  9. 7、android的button如何平铺一张图片?

    我想要实现的效果:,但是设计师给的是这样的:. 首先我想到的是这就像windows电脑设置壁纸有什么拉伸.自适应.平铺等类型,这个应该就是传说中的平铺吧. 那么我们知道,一个普通的button,设置他 ...

  10. javascript进行url转义方法比较escape、encodeURI和encodeURIComponent

    escape会将除了 ASCII 字母.数字和特定的符号(* @ - _ + . /)以外的字符全部进行转义编码,因此如果想对URL编码,最好不要使用此方法,因为它会让你的URL变的不可读. 提示:E ...