Я пытаюсь отправить в Cloudfoundry программу, содержащую 2 приложения: сервер Flask для запуска Python API и приложение Polymer для внешнего интерфейса. В настоящее время я использую следующую структуру:
manifest.yml
* * 1004
---
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
, и экземпляры будут запущены. Однако, когда я захожу на URL-адрес приложения flask_min, я не получаю «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 это не так. Первый вопрос: как я могу ссылаться на Flask API, когда он в Predix?
Кроме того, несмотря на то, что все работает локально, интерфейс Polymer также не загружается в Predix. Я также получаю
Не удалось загрузить ресурс: сервер ответил со статусом 503
(Сервис недоступен)
Несмотря на то, что cf push
кажется успешным, тот же самый IS работает локально, когда я делаю gulp
в папке pacing-app
и запускаю ваш python-сервер «вручную» локально.
Знаете, что я делаю не так? Как настроить интерфейс Polymer с компонентами Predix, использующими API-интерфейс Python, также работающий на Predix?
Я не настроен на использование двух отдельных приложений, я просто не знаю, как это сделать с одним приложением. Я бы предпочел, чтобы приложение Polymer работало на сервере NodeJS, а не обслуживало его из Flask из-за производительности, а сервер Python / Flask важен, потому что я намереваюсь запустить некоторый код SKLearn в фоновом режиме.