我有一个名为 bidsell 的 Node Web 客户端,以及一个名为 quote 的小型 Python Tornado REST API。 Bidsell 触发时会定期调用 http get 来报价。 Quote 适本地以 json 形式返回随机价格信息。在本地工作 - 想在线分享,但如何分享? Heroku 看起来很有前途。已经尝试在heroku上的同一个项目中部署bidsell和quote,每个项目都在自己的heroku web dyno或部署容器中运行。从日志“heroku log”来看,两者均已正确安装,但只有一个似乎正在运行。例如,我可以访问 bidsell 的首页 url,但是当触发 bidsell 去获取报价信息时,找不到报价服务:-( 我应该使用其他部署模式吗?
最佳答案
好的,按照 jr0cket 的建议,我创建了 2 个 heroku 项目 - 一个用于 bidsell Node 项目,另一个用于报价服务。
除了 bidsell Node 项目源文件之外,我还有一个包含以下内容的 procfile:
web: npm start
package.json 中的脚本部分通知 heroku 如何启动应用程序:
"scripts": {
"start": "gulp serve"
}
除了 quoteService 源 python 文件之外,我还有一个包含以下内容的 procfile:
web: python quoteService.py
和一个requirements.txt文件,其中包含:
tornado==3.1.1
pyrestful==0.4.1
有以下 proxy.js 作为 bidsell 应用程序中的中间件:
'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];
}
从 server.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 ;-)
关于python - 如何让 Node Web 客户端与 Heroku 上的 REST API 对话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32964855/