发布项目到heroku(以meanjs项目为例)

在开始heroku之前,请先阅读上一篇《Git多分支环境部署》

1) Create a Heroku account

记住你的email和密码。

2) Install the Heroku Toolbelt and login

cd PROJECT  
heroku login  

3) Create your heroku app

你可以在heroku的网站里操作,不过用命令行更快捷。

# From our repo's directory, create a heroku app
# YOURAPPNAME需要在heroku上唯一
heroku create YOURAPPNAME

# 如果你已经在heroku上面创建过app,可以使用这个命令来add your remote.
heroku git:remote -a YOURAPPNAME

# 将heroku重命名为prod(prod是我们的第五个repo)
git remote rename heroku prod

# 安装mongolab作为YOURAPPNAME的mongoDB服务(已经不可用)
heroku addons:add mongolab --app YOURAPPNAME

# 很可惜,heroku不让你安装addons,除非你验证你的信用卡
# 替代方案:前往MongoHQ网站注册,同样需要信用卡,最后选择[mongolab](https://mongolab.com/)
# 注意数据安全,通过config设置,而不要直接写在文件中。
heroku config:set MONGOLAB_URI="mongodb://<dbuser>:<dbpassword>@ds061631.mongolab.com:61631/YOURAPPNAME" --app YOURAPPNAME

# 设置heroku环境变量NODE_ENV为production
heroku config:set NODE_ENV=production --app YOURAPPNAME

# 设置本地环境变量NODE_ENV为production
# windows下可以使用SET
SET NODE_ENV=production  
# 或者其他系统下使用export
export NODE_ENV=production  
# 或者组合使用
NODE_ENV=production node app.js  
# 或者在文件里面定义(不推荐)
process.env.NODE_ENV = 'production';

# 在deploy到heroku之前,我们需要build一下js,css文件
# 如果没有本地跑过,先`npm install`安装依赖
grunt build  
# commit之前,将`public/dist/`从.gitignore里面移除
git add *  
git commit -m 'Compile distribution js and css'

# 推送master分支到prod
# heroku会自动安装package.json里面的dependencies
# 可能会有些许延迟,这是正常的。
$ git push prod master

官方文档:https://devcenter.heroku.com/articles/getting-started-with-nodejs#deploy-the-app

4) 建立stage环境

stage将成为我们的 第6个repo,前5个是local,fork,upstream,origin,prod

# 使用heroku fork快捷创建
heroku fork -a YOURAPPNAME YOURAPPNAME-stage

# Add a remote called 'stage'
git remote add stage [email protected]:YOURAPPNAME-stage.git

# Set MongoLab for stage
heroku config:set MONGOLAB_URI="mongodb://<dbuser>:<dbpassword>@ds061631.mongolab.com:61631/YOURAPPNAME-stage" --app YOURAPPNAME-stage

# Set app to use forked MongoDB database
heroku config:set NODE_ENV=production --app YOURAPPNAME-stage

# Syntax: git push [remote] [local branch]:[remote branch]
git push stage dev:master


# 可能报错:Permission denied (publickey),使用下面的命令快速上传key
heroku keys:add

# 使用下面的命令可以查看当前key
heroku keys

# 使用下面的命令可以删除key
heroku keys:remove [email protected]  
# Removing [email protected] SSH key... done

常见问题

1) Heroku最常见的问题是:

Application Error

An error occurred in the application and your page could not be served. Please try again in a few moments.

If you are the application owner, check your logs for details.  

此问题的原因有多种,通常是因为你的程序自身报错造成的,使用下面的命令查看详细log:

heroku logs -a APPNAME  

2) 强制push被.gitignore忽略的文件

这条命令将强制推送public/lib文件夹

git add -f public/lib  

参考文章

【英文】这篇文章非常详细,绝对值得一看:http://www.tilcode.com/deploying-a-mean-stack-app-to-heroku/

【英文】这篇也可以一并阅读:http://blog.powma.com/fast-cheap-and-mean-devstageprod-server-setup-with-heroku/

【英文】你也可以阅读来自mean.io官方的教程:http://mean.io/blog/2014/01/installing-mean-io-on-heroku-from-a-to-z/

Arvin Xiang

Read more posts by this author.

Subscribe to Arvin Xiang

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!