我正在尝试将包含2个应用程序的程序推送到Cloudfoundry - 一个Flask服务器来运行Python API和一个用于前端的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服务器(加上用于本地测试的decorator for 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?
此外,即使整个工作在本地工作,聚合物前端也不会在Predix上加载。我也明白了
无法加载资源:服务器响应状态为503(服务不可用)
即使cf push
看起来很成功,当我在gulp
文件夹中执行pacing-app
并在本地“手动”运行你的python服务器时,同样的IS在本地运行。
你知道我做错了什么吗?如何使用Predix组件设置聚合物前端,该组件使用也在Predix上运行的Python API?
我没有开始使用两个独立的应用程序,我只是不知道如何使用一个应用程序。我希望在NodeJS服务器上运行Polymer应用程序而不是从Flask服务,因为性能和Python / Flask服务器很重要,因为我打算在后台运行一些SKLearn代码。
我看到了两个选项。
聚合物和烧瓶的组合需要对烧瓶服务器进行一些“调整”以提供正确的聚合物文件夹......从如下的简单烧瓶服务器开始:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return app.send_static_file('index.html')
@app.route('/<path:the_path>')
def all_other_routes(the_path):
return app.send_static_file(the_path)
if __name__ == '__main__':
app.run(debug=True)
并在新文件夹中使用聚合物入门套件:
mkdir polymer && cd polymer && polymer init polymer-3-starter-kit && polymer build && cd ..
然后,您必须更改默认的烧瓶服务文件夹(静态),或者您只需创建一个指向聚合物构建文件夹的符号链接。我更喜欢通过在根目录(以及服务器文件旁边)上发出以下命令来执行第二步:
ln -s ./polymer/build/es6-bundled ./static