我试图让一个非常简单的python程序作为CloudFoundry应用程序在IBM Bluemix上作为后台进程运行。
我把它放在Github repo中。 这是一个单行req文件,因为我发现它比setup.py更容易,并且python buildpack需要它运行。
我的完整用例是我有一个用Django编写的API,我需要一个MQTT客户端,除了它之外还需要运行来从代理收集数据(我认为这与Watson IOT有关)。
我试图在同一个CF应用程序中使用2行Procfile运行,如下所示:
web: gunicorn -e DJANGO_SETTINGS_MODULE=conf.dev conf.wsgi --workers 2
worker: python time.py
但第二个过程被忽略了。
我也尝试过当前配置,但是只包含第二行的Procfile,它告诉我它无法找到启动命令。
现在,使用清单中的启动命令和no-route
true
,或者它没有通过运行状况检查,或者它只是在开始步骤等待,直到我收到此错误:
2016-07-22T13:10:36.671+0200
[LGR/null]
err
WebsocketListener.Start: Error connecting to a doppler server
2016-07-22T13:10:36.677+0200
[LGR/null]
err
proxy: error connecting to 159.8.128.238:8081: dial tcp 159.8.128.238:8081: getsockopt: connection refused
那么,有没有办法在Bluemix中运行后台任务,如果可能的话作为独立应用程序(更容易扩展和更新)?
编辑:现在它可以工作了,虽然除了打字错误之外我还没有改变任何东西来格式化我的Python脚本中的字符串,尽管应用程序几乎每分钟都会崩溃Removing crash for app with id 3978a475-4dc6-495f-9662-a6fd562dc28a
答案 0 :(得分:1)
问题的简短回答:将no-route
参数设置为true
的单独应用
好的,所以我显然已经让它完全运作了。
我不确定我做了什么,但问题可能来自于我要求32M实例并且最小值似乎是64M,所以Bluemix / CF对我的需求并不满意坠毁。
我在较旧的尝试中使用128M,但我认为我当时没有放no-route: true
答案 1 :(得分:0)
我使用该方法为Web和工作者实例运行两个单独的应用程序。但是,我仍在绊倒失败的健康检查。
因此,对于工作人员,我建议禁用路由,并禁用健康检查。
以下清单适用于通过gunicorn为工作人员运行Django for web和芹菜。
我的manifest.yml
---
applications:
- name: myapp
host: myapp
domain: eu-de.mybluemix.net
memory: 128M
command: bash ./run_web.sh
- name: myapp-workers
memory: 128M
no-route: true
health-check-type: none
command: bash ./run_worker.sh
run_web.sh
和run_worker.sh
shell脚本包含运行组件的命令,对于Web实例,我将迁移和collecstatic命令添加到运行脚本。