2019独角兽企业重金招聘Python工程师标准>>>

Build an Instagram clone with AngularJS, Satellizer, Node.js and MongoDB

#20.部署

instagrame 目录下创建一个新的文件 .gitignore,把 node_modules 加到它里面。你可以直接用命令行来操作:

<!-- lang: js -->
$ touch .gitignore
$ echo node_modules > .gitignore

这可以在提交文件到 Git 的时候忽略 node_modules 目录。你如果把你的 Node.js 应用带着 node_modules 的 Git 工程部署到 Heroku的话,你会遇到各种问题。Heroku 会根据你的 package.json 自动下载指定的包。

我们将会用 Heroku 托管后端,用 Dropbox 托管前端。这两个都是免费的。

我们先从后端开始。首先,到 Heroku 去注册然后创建一个新的应用。

Heroku 新的 Dashboard UI 非常简单易用。(干得漂亮 Heroku 的大牛们)

然后你会看到入门简介。你运行 heroku login 成功之后,你就可以创建一个新的 Git 仓库了。Heroku 和其他云平台一样,通过 Git 来部署。

打开终端然后进入 instagram 目录,然后输入:

<!-- lang: js -->
$ git init$ heroku git:remote -a <your heroku app name>$ git add .
$ git commit -am "initial commit"
$ git push heroku master

结束之后,查看 http://your-app-name.herokuapp.com (我的是 http://instagram-server.herokuapp.com) 然后你会看到一个 Application Error 页面。

没想到把,这早就在我的掌控之中,不过还是假装看一下发生异常的原因。在 instagram 目录下面执行 heroku logs 命令:

异常信息大概就是说,你的应用在端口 27017 连接不到 MongoDB。为了我们的应用能工作,我们在本地确实已经下载,安装,启动 MongoDB 了,但是,当我们把应用发布到 Heroku 的时候,不幸的是本地数据库当然不能跟 Heroku 一起用咯。

但是别怕 Compose (以前的 MongoHQ) 和 MongoLab 提供了免费的 MongoBD 托管。另外,你也可以用我的这个教程专用数据库啦:

<!-- lang: js -->
mongodb://hackhands:hackhands@ds063140.mongolab.com:63140/instagram

回到 Heroku 的 dashboard ,点 Settings 卡。你可以看到一个叫做 Reveal Config Vars 的按钮。点它,然后在同一页点 Edit 按钮。在这里你可以设置 config.js 的值。如果你指定了环境变量的话,它们会调用的这些值,否则的话就会退而求其次用默认字符串的值。

设置好之后点 Save

现在万事俱备,就等你重启 Heroku 应用了,来,干了这条命令行 heroku restart -a my-app-name:

若它一切安好,你便看不到 Application Error 页。记住,因为我们没有创建任何 **GET / ** 路由,你在访问 http://your-app-name.herokuapp.com 的时候什么都看不到。不过我们可以检查一下 GET /api/feed 路由,看看服务是不是真的启动了:

后端这块我们就完成了,下面我们开始前端部分。把 client 目录下面的文件全部拷贝到 Dropbox 的 Public Folder,最好放到一个子目录下,比如说 instagram 以确保它不会跟别的文件混成一团。

右键点击 index.html 然后从下拉菜单选 Copy public link…。拷贝 URL 到剪贴板。

打开 instagram/client 目录的 app.js 文件,然后用新的 URLs 更新 Satellizer 的 Instagram provider。你需要更新: loginUrl, signupUrl, 还有 OAuth 2.0 url 和 redirectUri 到实际的 Heroku 和 Dropbox URLs。

注意: 别忘记在 instagram.com/developer 把 redirectUri 更新到和上面的 redirectUri 一样。

你还要更新 client/services/api.js 里面的 URLs:

然后,执行 gulp (要是你还没把它启动的话) 来更新 app.min.js。然后拷贝 app.min.js 把它贴到 Dropbox 的 Public Folderinstagram 目录下面,覆盖掉老文件。

注意: 如果你喜欢这样的配置的并且考虑给它弄个自定义域名指向这个 Dropbox Public Folder。其实,你还可以考虑用 GitHub Pages 托管静态页面,老实说我觉得它比 Dropbox 要简单多了,因为它从来不会用来干我们现在在 Dropbox 上做的这些事情。比如说,我的个人网站 http://sahatyalkabov.com [source code],已经在 GetHub Pages 上面跑了两年多了,一点问题都没有。而且它也是免费的。

请注意我用了 https://instagram-server.herokuapp.com 而不是 http://instagram-server.herokuapp.com。因为我们的前端是托管在 Dropbox 服务商的,它用的是加密 (https) 协议,我们不能发送一个非加密 (http) 请求。如果你这样做的话会得到下面的错误信息:

如果你跟我做的完全一样,那么现在所有的在 Heroku (back-end) 和 Dropbox (front-end) 之间的请求应该都可以正常运转了。

不过有可能更惨,如果你必须把前端和后端分开跑在不同的服务器上的话,那么至少要考虑一下 GitHub Pages, Amazon S3 或者 Digital Ocean with Nginx 来放你的静态内容。而且 CORS 很多时候麻烦多过好处,这就是为什么我一直都倾向在同一台主机上跑前后端。

转载于:https://my.oschina.net/ilivebox/blog/374262

AngularJS+Satellizer+Node.js+MongoDB-Instagram-20相关推荐

  1. AngularJS+Satellizer+Node.js+MongoDB-Instagram-01

    2019独角兽企业重金招聘Python工程师标准>>> Build an Instagram clone with AngularJS, Satellizer, Node.js an ...

  2. 在 Azure 中的 Linux VM 上创建 MongoDB、Express、AngularJS 和 Node.js (MEAN) 堆栈

    本教程介绍如何在 Azure 中的 Linux VM 上实现 MongoDB.Express.AngularJS 和 Node.js (MEAN) 堆栈. 通过创建的 MEAN 堆栈,可以在数据库中添 ...

  3. 用Node.JS+MongoDB搭建个人博客(成品展示)

    在博客里可以随意畅写和分享自己喜欢的技术,和网友分享知识也是一种提升.根据自己所发表的博客也能更加加深印象. 与此同时写博客也可以提高自己的写作能力(虽然不咋地),但我相信博客只会越写越有质量的. 个 ...

  4. Node.js+mongodb 学习笔记(三)swagger注释+用户管理

    Node.js+mongodb 学习笔记(三)swagger注释+用户管理 Node.js+mongodb 学习笔记(三)swagger注释+用户管理 用户注册 用户登录 修改密码 swagger注释 ...

  5. Get全栈技能点 Vue2.0 / Node.js / MongoDB 打造商城系统

    第1章 课程介绍 简单回顾前端近几年的框架模式,了解不同时期下的框架特点.其次介绍Vue框架的背景和核心思想,以及同其它MV*框架的对比. 1-1 课程-导学 1-2 前端框架回顾 1-3 vue概况 ...

  6. node.js mongodb ReplSet

    随着web2.0兴起,高并发大数据量的应用对数据库高速响应的性能要求日趋明显,传统的关系型数据库在这方面显得有些乏力.有矛自有盾,内存DB的出现弥补了传统关系型db的不足.眼下市面流行的内存db主要有 ...

  7. 为一个 iOS 应用编写一个简单的 Node.js/MongoDB Web 服务

    原文链接:https://github.com/nixzhu/dev-blog/blob/master/2014-04-21-write-a-simple-nodejs-mongodb-web-ser ...

  8. mongodb连接池 php,node.js,mongodb_nodejs使用mongodb连接池,node.js,mongodb - phpStudy

    nodejs使用mongodb连接池 在开发中想使用连接池 在网上找到了一段代码 但是自己测试的时候发现了些问题 当我把setTimeout中的语句数量变成五条以上的时候 nodejs会首先执行五条 ...

  9. 基于node.js+MongoDB+elementui的分页功能更新优化

    一.准备分页组件. 1.1分页组件 src-->components-->Pagination-->index.vue <template><div class=& ...

最新文章

  1. Maven 传递性依赖
  2. 【BZOJ1015】【JSOI2008】星球大战 并查集
  3. WPF纯手工两步打造图片切割工具(一)
  4. 日本钢铁业排名(2014/11/5)
  5. I/O通信模型(BIO,NIO,AIO)
  6. centos7下kubernetes(18。kubernetes-健康检查)
  7. lvs+keepalived详解
  8. 中国计算机信息系统集成行业协会有含金量吗,系统集成工程师证书的含金量怎么样...
  9. 浅谈C++中的资源管理
  10. 人只会听到他想听的话——与领导甲的一次谈话
  11. CDMA2000中的Walsh码,PN码,短码序列的初相位偏置(PN OFFSET)之間的差別與關係(1)
  12. Java解析魔兽争霸3录像W3G文件(二):压缩数据块解压合并
  13. 家族谱树形数据结构实现
  14. 简要比较费雪方程与剑桥方程
  15. iphone型号表_苹果所有产品型号大全
  16. echarts 使用zoom属性的影响
  17. 用HTML实现计数器功能
  18. pycharm参数设置;解决 from imutils import contours
  19. java unparseable_java.text.ParseException: Unparseable date: 2015-06-09 hh:56:19
  20. 神经网络中的BN操作(常见正则化处理)

热门文章

  1. C#中StringBuilder类的使用
  2. Java判断文件类型
  3. 【C 语言】Windows 下使用 gcc 编译器 ( 常用的编译器 | Qt 中的 gcc 编译器 | 独立安装 MinGW )
  4. 【Flutter】Flutter 手势交互 ( 点击事件处理 | 点击 onTap | 双击 | 长按 onLongPress | 点击取消 | 按下 onTapDown | 抬起 onTapUp )
  5. 【计算机网络】网络安全 : 防火墙 ( 简介 | 防火墙功能 | 防火墙分类 | 分组过滤路由器 | 应用网关 )
  6. 【Android 异步操作】AsyncTask 异步任务 ( 参数简介 | 方法简介 | 使用方法 | AsyncTask 源码分析 )
  7. Android Studio开发配置NDK环境
  8. Shell脚本中command not found报错处理
  9. 慢吞吞的pip切换源
  10. Steam 导入已下载好的游戏