2015-10-06 110 views
1

我有一个叫做bidsell的节点网络客户端,和一个名为quote的小型Python Tornado REST API。 Bidsell在触发时会定期通过http获取报价。引用作为json,随机返回随机价格信息。在当地工作 - 想在线分享,但是如何? Heroku看起来很有前途。已经尝试在heroku上的同一个项目中部署bidsell和报价,每个项目都在他们自己的heroku web dyno或部署容器中运行。从日志“heroku日志”都安装正确,但只有一个似乎正在运行。例如,我可以访问bidsell的首页网址,但是当bidsell被触发去取回报价信息时,找不到报价服务:-(我应该使用另一个部署模式吗?如何让Node web客户端在Heroku上与REST API交谈?

回答

0

由于您的项目是两个独立的技术堆栈,最简单的方法就是将这些应用程序部署为两个独立的Heroku应用程序,从而为您创建每个应用程序/服务所需的特定环境(语言,运行库,库)提供了简单方法。配置变量QUOTE_REST_API用于指向外部Web地址的节点Web客户端。例如,使用heroku toolbelt

heroku config:set QUOTE_REST_API=https://quote-api.herokuapp.com/ 

在节点客户端中使用QUOTE_REST_API配置变量将提供一种简单的方法来更改报价的地址,而无需更改代码。

如果你正在运行在一个应用程序的Heroku两个独立的项目,你需要确保你有两个web:项为Procfile,开始您的单独的进程。只有标记为Web的进程才会监听网络流量。

如果您使用免费的heroku层,您可能无法运行两个不同的Web进程。

+0

感谢jr0cket,请参阅下面的实现细节:-) –

1

ok,jr0cket建议我创建了2个heroku项目 - 一个用于bidsell节点项目,另一个用于报价服务。

除了bidsell节点项目源文件我已经包含以下内容的procfile:

web: npm start 

和通知的package.json的Heroku如何启动一个应用程序的脚本部分:

"scripts": { 
    "start": "gulp serve" 
} 

除了quoteService源蟒文件我有一个procfile含有下列:

web: python quoteService.py 

和含有requirements.txt文件:

tornado==3.1.1 
pyrestful==0.4.1 

曾在bidsell应用中的以下的proxy.js中间件:

'use strict'; 
 

 
var proxyMiddleware = require('http-proxy-middleware'); 
 

 
var options = { 
 
    target: 'http://quoteservce.herokuapp.com:80', 
 
    changeOrigin: true 
 
}; 
 

 
var proxy = proxyMiddleware('/quote', options); 
 

 
module.exports = function(){ 
 
    return [proxy]; 
 
}

从服务器被调用。JS:

'use strict'; 
 

 
.. 
 
    
 
var middleware = require('./proxy'); 
 

 
module.exports = function(options) { 
 

 
    function browserSyncInit(baseDir, browser) { 
 
    browser = browser === undefined ? 'default' : browser; 
 

 
    .. 
 

 
    var server = { 
 
     baseDir: baseDir, 
 
     routes: routes 
 
    }; 
 

 
    server.middleware = middleware(); 
 

 
    browserSync.instance = browserSync.init({ 
 
     port: (process.env.PORT || 5000), 
 
     startPath: '/', 
 
     server: server, 
 
     browser: browser 
 
    }); 
 
    } 
 

 
    .. 
 

 
    gulp.task('serve', ['watch'], function() { 
 
    browserSyncInit([options.tmp + '/serve', options.src]); 
 
    }); 
 

 
    .. 
 
    
 
};

以允许bidsell和quoteService之间的通信。有关更多背景信息,请参阅here

正在运行的应用程序,您可以找到here

可能需要一段时间的空闲自由层的Heroku DYNOS火起来;-)

Bidsell project on gitQuoteService project on git