Predix - 聚合物前端与Flask Python服务器通信?

问题描述 投票:1回答:2

我正在尝试将包含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代码。

python flask polymer predix
2个回答
0
投票

我看到了两个选项。

  1. 使用带有NodeJS的predix-webapp-starter作为前端服务器。使用单独的Python微服务作为后端服务器。这种方法可能会更好,特别是如果您的后端SKLearn流程需要很长时间。
  2. 在一个Python / Flask服务器中运行所有内容。你可以看看Predix Digital Volcano App作为一个例子。如果您有更多使用Python的经验,这种方法可能会更容易。

0
投票

聚合物和烧瓶的组合需要对烧瓶服务器进行一些“调整”以提供正确的聚合物文件夹......从如下的简单烧瓶服务器开始:

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
© www.soinside.com 2019 - 2024. All rights reserved.