文档章节

部署到 Heroku

maweitao
 maweitao
发布于 2014/06/11 21:39
字数 1217
阅读 6738
收藏 10

使用 MongoHQ

在把我们的博客部署到 Heroku 之前,我们首先学习下如何使用 MongoHQ 。MongoHQ 是一个提供 MongoDB 存储服务的云平台,使用起来非常简单,提供了在线查询和修改数据库的功能。MongoHQ 的免费套餐提供了 512MB 的存储空间。

注册

https://bridge.mongohq.com/signup

创建一个数据库

注册后,选择一个 Free 的数据库类型,并给数据库起一个名字,点击 Create Database 创建数据库。此时跳转到如下界面:

如图所示,我们可以在命令行中连接远程数据库,也可以通过 Mongo URL 使用数据库。接下来,我们修改博客的代码,使用 MongoHQ 提供的云端数据库取代使用本地数据库。

首先,我们需要给数据库添加一个用户。点击左侧的 Admin ,然后点击 Users 进入用户管理页面。在 username 和 password 处分别填写用户名和密码:

db.addUser('username','password')

点击 Add user 添加用户。

修改 settings.js 为:

module.exports = { 
  cookieSecret: 'myblog', 
  url: 'your_Mongo_URI'
};

将 your_Mongo_URI 替换为你自己创建的数据库的 URL ,将 <user>  <password> 分别替换为刚才添加的用户的名字和密码。

打开 app.js ,将 app.use(express.session(...)); 修改为:

app.use(express.session({
  secret: settings.cookieSecret,
  cookie: {maxAge: 1000 * 60 * 60 * 24 * 30},//30 days
  url: settings.url
}));

删除 db.js ,打开 post.js 、 user.js 和 comment.js ,均作以下修改:

  •  mongodb = require('./db') 修改为 mongodb = require('mongodb').Db
  • 添加 var settings = require('../settings');
  • 将所有 mongodb.open(function (err, db) { 修改为 mongodb.connect(settings.url, function (err, db) {
  • 将所有 mongodb.close(); 修改为 db.close();

现在,无需启动你的本地数据库,运行你的博客试试吧~

注意:Heroku 也提供了 MongoHQ 的 Add-ons ,但需要填写信用卡信息,所以我们这里直接使用外链的 MongoHQ 。

部署到 Heroku

Heroku 是一个主流的 PaaS 提供商,在开发人员中广受欢迎。这个服务围绕着基于 Git 的工作流设计,假如你熟悉 Git ,那部署就十分简单。这个服务原本是为托管 Ruby 应用程序而设计的,但 Heroku 之后加入了对 Node.js 、Clojure 、Scala 、Python 和 Java 等语言的支持。Heroku 的基础服务是免费的。

下面我们使用 Heroku 部署我们的博客。

注册

https://www.heroku.com/

创建一个应用

注册成功后,就进入了控制面板页面,如图所示:

点击 Create a new app ,填写独一无二的应用名称后,点击 creat app 即创建成功,然后点击Finish up 

此时跳转到控制面板页,并且可以看到我们创建的应用了。我们通过 应用名称.herokuapp.com即可访问我们的应用主页。如图所示:

安装 Heroku Toolbelt

Heroku 官方提供了 Heroku Toolbelt 工具更方便地部署和管理应用。它包含三个部分:

  • Heroku client :创建和管理 Heroku 应用的命令行工具
  • Foreman :一个在本地运行你的 app 的不错的选择
  • Git :分布式版本控制工具,用来把应用推送到 Heroku

Heroku Toolbelt 下载地址:https://toolbelt.heroku.com/ 

注意:假如你的电脑上已经安装了 Git ,那么在安装的时候选择 Custom Installation 并去掉安装 Git 的选项,否则选择 Full Installation 

安装成功后,打开 Git Bash ,输入 heroku login ,然后输入在 Heroku 注册的帐号和密码进行登录。Git 会检测是否有 SSH 密钥,如果有,则使用此密钥并上传,如果没有,则创建一个密钥并上传。

Tips:SSH 密钥通常用于授予用户访问服务器的权限。可将它们用于某些配置中,以便无需密码即可访问服务器。许多 PaaS 提供商都使用了此功能。

Procfile

在工程的根目录下新建一个 Procfile 文件,添加如下内容:

web: node app.js

Procfile 文件告诉了服务器该使用什么命令启动一个 web 服务,这里我们通过 node app.js 执行 Node 脚本。为什么这里声明了一个 web 类型呢?官方解释为:

The name “web” is important here. It declares that this process type will be attached to the HTTP routing stack of Heroku, and receive web traffic when deployed.

上传应用

打开 Git Bash ,输入:

$ git init
$ git add .
$ git commit -m "init"
$ git remote add heroku git@heroku.com:yourAppName.git

注意:将 yourAppName 修改为你自己的应用名。

在 push 到 heroku 服务器之前,我们还需要做一个工作。由于我国某些政策的原因,我们需到~/.ssh/ 目录下,新建一个 config 文件,内容如下:

Host heroku.com
User yourName
Hostname 107.21.95.3
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
port 22

然后回到 Git Bash ,输入:

$ git push heroku master

稍等片刻即上传成功。现在你就可以访问 http://yourAppName.herokuapp.com/ 了,如图所示:

注意:假如出现了 Application Error,可能是没有启动应用,到应用面板页勾选 web node app.js ,然后点击 Apply Changes 启动应用。

© 著作权归作者所有

共有 人打赏支持
maweitao
粉丝 11
博文 27
码字总数 26297
作品 0
武汉
私信 提问
【翻译】Flask大型教程|第十八章:Heroku上的部署

本文翻译自The Flask Mega-Tutorial Part XVIII: Deployment on Heroku 这是Flask Mega-Tutorial系列的第十八部分,我将在其中部署Microblog到Heroku云平台。 在前面的文章中,我向你展示了托...

一进制
2018/04/04
0
0
使用heroku部署node.js应用

Heroku是一个云应用部署平台,你可以在上面部署简单的应用(包括java、ruby、node.js应用等)。 这里只是做一个测试,所以使用了Express框架,你可以按照heroku的参考说明部署自己的应用。 注册...

Haffe
2013/11/30
0
7
在 Heroku 上部署 Django 应用

Heroku是一个很棒的平台,它有很多的控件,并且搭建环境相对来说也比较容易。本指南中,我将一步一步指导你在Heroku平台上部署一个简单地Django应用 搭建开发环境 Heroku工具链 假设你已经在...

oschina
2014/09/09
2.8K
0
Heroku 快速搭建 免费高性能 Jupyter Notebook

Heroku 是一个支持多语言的PaaS。简单来说这是一个可以免费快速将自己的应用部署在上面的云平台。Heroku提供Heroku Buttons 来一键部署应用。我们可以使用 heroku-jupyter的脚本自动配置部署...

AvatarBB
2018/05/17
0
0
用Heroku+snova-c4搭梯子上墙

1.snova-c4(翻墙软件)下载 https://code.google.com/p/snova/downloads/list 服务端 https://snova.googlecode.com/files/snova-c4-java-server-0.22.0.war 客户端 https://snova.googleco......

waylau
2014/04/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

vue 对对象的属性进行修改时,不能渲染页面 vue.$set()

我在vue里的方法里给一个对象添加某个属性时,我console.log出来的是已经更改的object ,但是页面始终没有变化 原因如下: **受现代 JavaScript 的限制 (而且 Object.observe 也已经被废弃),...

Js_Mei
今天
2
0
开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
12
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
8
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
5
0
XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部