我正在部署一个同时使用nodeJS的Django应用程序 有了这个,我偶然发现了
https://blog.heroku.com/heroku-django-node
我能够设置buildpacks和procfiles 但我在设置node-http-proxy
方面遇到了问题所以我想这部分让我感到困惑(来自上面的链接):
当然,网络dyno上只有一个进程可以绑定到PORT。通过添加环境变量(我们称之为DJANGO_PORT)并将node-http-proxy添加到我们的节点脚本,我们能够将节点绑定到PORT并将所有正常的Web流量代理到127.0.0.1以上的Django。生成的Procfiles看起来像这样:
我已经将env变量添加到我的heroku应用程序中。
2个问题
const PORT = process.env.PORT httpProxy.createProxyServer({target:'app_url:8080'}).listen(PORT);
我收到上述错误:
/app/node_modules/http-proxy/lib/http-proxy/index.js:119
throw err;
^
Error: connect ECONNREFUSED {ip_address}:8080
at Object._errnoException (util.js:1022:11)
at _exceptionWithHostPort (util.js:1044:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1198:14)
需要帮助,至少知道我的想法或理解是否正确。 只是想知道我是否正确的思考方向
先谢谢!
答案 0 :(得分:0)
解决了问题
对于想要在heroku上的单个dyno上运行Django和NodeJS的人。
这就是我做过的事情
我通过Heroku CLI将自定义buildpack添加到我的应用程序以及heroku / python和heroku / nodejs(多个buildpacks)
http://www.github.heroku.com/heroku/heroku_buildpack_runit
创建Procfile
web: bin/runsvdir-dyno
和Procfile.web
DJANGO_PORT在Heroku的Envs上
django: gunicorn appname.wsgi:application --bind 127.0.0.1:$DJANGO_PORT
node: node server.js
最后使用node-http-proxy如下。这是我的端口3000上运行的节点应用程序
var webpack = require('webpack')
var WebpackDevServer = require('webpack-dev-server')
var config = require('./webpack.local.config')
var httpProxy = require('http-proxy')
const PORT = process.env.PORT
// ::::::::::::::::::Starting from here
var NODE_PORT = 3000;
var http = require('http')
var proxy = httpProxy.createProxyServer({});
http.createServer(function(req, res) {
// For all URLs beginning with /channel proxy to the Node.JS app, for all other URLs proxy to the Django app running on DJANGO_PORT
if(req.url.indexOf('/channel') === 0) {
// Depending on your application structure you can proxy to a node application running on another port, or serve content directly here
proxy.web(req, res, { target: 'http://localhost:' + NODE_PORT });
// Proxy WebSocket requests if needed
proxy.on('upgrade', function(req, socket, head) {
proxy.ws(req, socket, head, { target: 'ws://localhost:' + NODE_PORT });
});
} else {
proxy.web(req, res, { target: 'http://localhost:' + process.env.DJANGO_PORT });
}
}).listen(process.env.PORT);
// :::::::::::::::::::To HERE
new WebpackDevServer(webpack(config), {
publicPath: config.output.publicPath,
hot: true,
inline: true,
historyApiFallback: true,
watchOptions: {
aggregateTimeout: 300,
poll: 1000
},
headers: { "Access-Control-Allow-Origin": "*" },
}).listen(3000, config.ip, function (err, result) {
if (err) {
console.log(err)
}
console.log('Listening at ' + config.ip + ':3000')
})