![](/img/trans.png)
[英]Node.js server works locally but not on Heroku because of missing `cleanModifiedSubpaths`
[英]Heroku node.js and Flask application working locally but not in server
我有一个Web应用程序,它使用node.js并与Flask应用程序通信以检索一些配置并将作业发送到后端。 Flask返回带有信息的JSON
烧瓶文件(REST.PY):
from flask import Flask, jsonify, request, redirect, url_for
import subprocess
import os
import json
from cross_domain import *
app = Flask(__name__)
...
@app.route('/api/v1.0/proteins', methods=['GET', 'OPTIONS'])
@crossdomain(origin='*')
def get_protein_names():
proteins = os.walk(TARGET).next()[1]
protein_lst = [{"filename": protein} for protein in sorted(proteins) if protein != "scripts"]
return jsonify({"files": protein_lst})
if __name__ == '__main__':
app.run(debug=True,port=9000)
这是js代码:
...
this.restAddr = "http://127.0.0.1:9000";
...
this.httpGet = function(url, callback) {
var xmlHttp;
xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
callback(xmlHttp.responseText);
}
};
...
httpGet(restAddr + "/api/v1.0/proteins", populateProteins);
我当前正在使用此构建 ,以便在Procfile中运行两个命令。 当我使用foreman start
在本地运行时,它可以工作,但是当我部署到Heroku时,框架不再相互通信,并且XMLHTTPRequests中没有响应。 不过,我仍然可以使用node.js部分。
这是Heroku日志:
...
2016-06-16T20:08:59.174025+00:00 app[web.1]: buildpack=runit ps=python at=start
2016-06-16T20:08:59.174156+00:00 app[web.1]: buildpack=runit ps=node at=start
2016-06-16T20:09:04.490687+00:00 app[web.1]: * Running on http://127.0.0.1:9000/ (Press CTRL+C to quit)
2016-06-16T20:09:04.515389+00:00 app[web.1]: * Restarting with stat
2016-06-16T20:09:05.138990+00:00 heroku[web.1]: State changed from starting to up
2016-06-16T20:09:05.568687+00:00 app[web.1]: * Debugger is active!
2016-06-16T20:09:05.593316+00:00 app[web.1]: * Debugger pin code: 237-920-039
2016-06-16T20:09:06.730693+00:00 app[web.1]: Succeeded connected to: <MONGODB_URI> in port 35556
这是运行Foreman时出现的内容:
$ foreman start -f Procfile.local
14:59:30 node.1 | started with pid 21241
14:59:30 python.1 | started with pid 21242
14:59:31 python.1 | * Running on http://127.0.0.1:9000/ (Press CTRL+C to quit)
14:59:31 python.1 | * Restarting with stat
14:59:31 python.1 | * Debugger is active!
14:59:31 python.1 | * Debugger pin code: 215-168-436
14:59:31 node.1 | Succeeded connected to: mongodb://localhost/algdock in port 3000
我需要了解为什么在部署它时还是无法解决问题,或者是否还有其他更好的方法可以解决此问题。
编辑:使用gunicorn for python,它会给出Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
Procfile.web
web: node gui/web_app/AlGDock/bin/www
web: gunicorn --pythonpath gui/api --bind 127.0.0.1:9000 wsgi:app
wsgi.py
from REST import app
if __name__ == "__main__":
app.run()
Heroku日志:
2016-06-17T00:35:25.808594+00:00 heroku[web.1]: Starting process with command `bin/runsvdir-dyno`
2016-06-17T00:35:26.398041+00:00 heroku[web.1]: Process exited with status 0
2016-06-17T00:35:28.003708+00:00 app[web.1]: buildpack=runit ps=web at=start
2016-06-17T00:35:28.376799+00:00 app[web.1]: [2016-06-17 00:35:28 +0000] [15] [INFO] Starting gunicorn 19.6.0
2016-06-17T00:35:28.377454+00:00 app[web.1]: [2016-06-17 00:35:28 +0000] [15] [INFO] Listening at: http://127.0.0.1:9000 (15)
2016-06-17T00:35:28.377583+00:00 app[web.1]: [2016-06-17 00:35:28 +0000] [15] [INFO] Using worker: sync
2016-06-17T00:35:28.385995+00:00 app[web.1]: [2016-06-17 00:35:28 +0000] [20] [INFO] Booting worker with pid: 20
2016-06-17T00:35:28.826322+00:00 app[web.1]: /app/target/
2016-06-17T00:35:28.826340+00:00 app[web.1]: /app/AlGDock/
2016-06-17T00:36:25.826633+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
您不知道使用的heroku服务器端口是一个问题。 不会是9000。您需要能够获取heroku应用程序端口(如果存在)并将其考虑在内或使用默认端口。
抱歉,我错过了答案,将其发布为答案...
如果您正在运行Web dyno,则heroku需要能够在60秒钟内连接到它,或者假设它无法正常工作并关闭dyno。 没有设置heroku使用的端口,因此您需要从dynos环境中获取该端口,因为您无法控制heroku分配的端口,所以启动时我遇到了相同的错误。
节点+快速版本为app.set('port', (process.env.PORT));
此问题显示了在使用Flask Deploying Flask应用程序到Heroku时如何获取此值
编辑:同样从heroku python文档
port = int(os.environ.get("PORT", 5000)) app.run(host='0.0.0.0', port=port)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.