1

我正在尝试将包含 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看起来很成功,但当我gulppacing-app文件夹中执行操作并在本地“手动”运行你的 python 服务器时,相同的 IS 在本地运行。

你知道我做错了什么吗?如何使用 Predix 组件设置 Polymer 前端,该组件使用也在 Predix 上运行的 Python API?

我不打算使用两个单独的应用程序,我只是不知道如何使用一个应用程序来做到这一点。由于性能和 Python/Flask 服务器很重要,因为我打算在后台运行一些 SKLearn 代码,所以我宁愿让 Polymer 应用程序在 NodeJS 服务器上运行,而不是从 Flask 提供它。

4

2 回答 2

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
于 2019-04-26T13:29:27.467 回答
0

我看到你有两个选择。

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