我正在尝试将包含 2 个应用程序的程序推送到 Cloudfoundry - 一个运行 Python API 的 Flask 服务器和一个用于前端的 Polymer 应用程序。目前我正在使用以下结构:
manifest.yml
:
---
applications:
- name: flask_min
path: ./flask_min
buildpack: https://github.com/cloudfoundry/python-buildpack
memory: 512M
- name: pacing_app
memory: 512M
buildpack: nodejs_buildpack
command: node server/app.js
path: ./pacing_app/build/es5-basic
然后在文件夹中./flask_min
我有一个Procfile
:
web: python3 app.py
并且app.py
有一个 Flask 服务器(加上用于本地测试的 CORS 装饰器,为简洁起见,我从这里省略了):
app = Flask(__name__)
port = int(os.getenv("PORT", 7733))
@app.route('/hello', methods=['GET', 'OPTIONS'])
@crossdomain(origin='*')
def hello():
return "Hello"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=port)
我可以cf push
,并且实例显示正在运行。但是,当我访问 flask_min 应用程序的 url 时,我没有得到它应该打印出来的“Hello”,我得到一个HTTP ERROR 503
.
至于 pacing_app,我使用的是Predix Webapp Starter,只是我删除了其中的元素seed-app.html
并用 API 调用替换了它:
<template>
<iron-ajax url="http://localhost:7733/hello" handle-as="text" last-response="{{data}}" auto></iron-ajax>
<p>{{data}}</p>
</template>
这在本地是有效的,但是在 Predix 上却不是。第一个问题是:一旦在 Predix 上,我如何链接到 Flask API?
此外,即使整个事情在本地工作,Polymer 前端也不会在 Predix 上加载。我也得到
加载资源失败:服务器响应状态为 503(服务不可用)
尽管cf push
看起来很成功,但当我gulp
在pacing-app
文件夹中执行操作并在本地“手动”运行你的 python 服务器时,相同的 IS 在本地运行。
你知道我做错了什么吗?如何使用 Predix 组件设置 Polymer 前端,该组件使用也在 Predix 上运行的 Python API?
我不打算使用两个单独的应用程序,我只是不知道如何使用一个应用程序来做到这一点。由于性能和 Python/Flask 服务器很重要,因为我打算在后台运行一些 SKLearn 代码,所以我宁愿让 Polymer 应用程序在 NodeJS 服务器上运行,而不是从 Flask 提供它。