在heroku dyno中从节点到python进行http调用

时间:2017-02-01 12:27:49

标签: python node.js heroku

我继承了一个包含NodeJS部分和Python部分的存储库。项目结构是NodeJS位于存储库的根目录,而Python部分位于Python文件夹中:

root
|- app
  |- some.js
  |- files.js
|- Python
  |- other.py
  |- files.py

我已经设置了一个Heroku dyno来同时服务于Python服务器和NodeJS服务器,方法是在我的Procfile中(基于this older article松散地):

web: npm start
python: sh -c 'cd ./Python/ && export PYTHONPATH=. && python other.py'

python项目设置为使用端口2001.它是Bottle应用程序,在启动服务器时,我传入此端口(取自Heroku设置)。

在我的日志记录中,我可以看到两者都已成功启动。简化为:

Bottle v0.12.13 server starting up (using WaitressServer())... 
Listening on http://localhost:2001/ 
Server running at: http://<guid>:7667 

当我请求我的应用程序的根目录时,我收到了NodeJS服务器的回复。但是,对于某些路由,我想调用Python部分。我通过使用Node http在本地成功完成了此操作。但是,在Heroku上执行此操作时,我收到以下错误:

connect ECONNREFUSED 127.0.0.1:2001

当我在Heroku本地运行此项目时(通过CLI工具heroku local),它完美地运行。关于如何让它发挥作用的任何想法?

1 个答案:

答案 0 :(得分:1)

终于找到了它。 Dynos不能通过HTTP相互通信,只能通过队列进行通信。我在文档中找不到它,但是它们在某个地方说明了它。

所以我改变了我的Procfile只运行一个dyno:

web: npm start & sh -c 'cd ./Python/ && export PYTHONPATH=. && python other.py'

现在我可以毫无问题地致电127.0.0.1:2001