我需要从使用cf部署的python flask应用程序运行java命令。我们如何让这个python烧瓶应用程序可以使用java运行时。
我尝试使用multi-buildpack,但是java_buildpack期望在部署应用程序时执行一些jar或war。
任何使java可用于python flask app的方法吗?
答案 0 :(得分:1)
buildpack链中的最后一个buildpack负责确定启动应用程序的命令,这就是Java buildpack期望执行JAR / WAR的原因。
Java buildpack在编写本文时不提供supply
脚本,因此在使用多buildpack支持时它只能作为 last buildpack运行。看起来在将来的某个时候,Java buildpack将提供supply
脚本,但这仍然在制定here。
目前,您可以使用apt-buildpack并以这种方式安装JRE / JDK。
为此,请将名为apt.yml
的文件添加到项目文件夹的根目录中。在该文件中,输入以下内容:
---
packages:
- openjdk-8-jre
repos:
- deb http://ppa.launchpad.net/openjdk-r/ppa/ubuntu trusty main
keys:
- https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xEB9B1D8886F44E2A
这将告诉apt buildpack为Ubuntu Trusty添加PPA,我们可以获取最新的openjdk8。这将安装在/home/vcap/deps/0
下,将java
可执行文件置于/home/vcap/deps/0/lib/jvm/java-8-openjdk-amd64/bin/java
。
注意:遗憾的是java
二进制文件不在路径上,因为Ubuntu使用update-alternatives
的方式,我们无法使用该工具将其放在路径上在CF应用程序容器中,因为我们没有root访问权限。
设置完成后,您可以使用normal instructions来使用多个buildpack。
$ cf push YOUR-APP --no-start -b binary_buildpack
$ cf v3-push YOUR-APP -b https://github.com/cloudfoundry/apt-buildpack#v0.1.1 -b python_buildpack
注意:推送使用多个构建包的过程将来可能会发生变化,v3-push
(目前正在试验中)将会消失。
注意:以上示例apt buildpack的硬编码版本v0.1.1
。您应该使用最新的稳定版本,您可以找到here。建议不要使用主分支。
答案 1 :(得分:0)
实现组合Java和Python的目标的一种方法是使用context-based routing。我有一个example to combines Python and Node.js,但方法是一样的。
基本上,您有第二个应用程序服务于域/ URI的一个或多个路径。