在Python Flask Cloud Foundry / IBM Cloud应用程序中添加Java / JRE / JVM

时间:2018-01-20 12:43:13

标签: java python jvm ibm-cloud dashdb

我正在Cloud Foundry / IBM Cloud环境中运行python flask应用程序。在我的应用程序中,我尝试使用IBMDBPY-package连接到DB2 Warehouse on Cloud。这个包需要一个名为jaydebeapi的包才能运行。为了让jaydebeapi工作,我想我需要在服务器上安装JRE / JVM。我尝试为基于Linux的操作系统添加Server JRE,但它也没有用。我在尝试上传Sever JRE之前遇到的错误是:

df['a'] = df['a'].drop_duplicates()
df['a'] = df['a'].fillna(0)

有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

经过反复试验,对我有用的解决方案是如下所述的多构建包部署:

cf push -b https://github.com/cloudfoundry/multi-buildpack

并在项目的根目录中包含一个multi-buildpack.yml,其中包含以下内容

buildpacks:
  - https://github.com/cloudfoundry/apt-buildpack
  - https://github.com/cloudfoundry/python-buildpack

和带有以下内容的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

runtime.txt文件中(也在项目的根目录中)是python的版本 python-3.6.6

不幸的是,JAVA已安装在您的home deps目录中,因此,您必须在JAVA_HOME中创建一个manifest.yml环境变量。

JAVA_HOME: /home/vcap/deps/0/apt/usr/lib/jvm/java-8-openjdk-amd64/jre/

我还尝试通过这种方式将jre / bin添加到路径中

PATH: /bin:/usr/bin:/home/vcap/deps/0/apt/usr/lib/jvm/java-8-openjdk-amd64/jre/bin

不过,对我而言,推送消除了这一点,仅安装了默认路径/bin;/usr/binJAVA_HOME足以使jaydebapi与{{1}的数据库驱动程序一起使用}个文件。如果您需要此环境变量, 也许尝试使用jar操作系统软件包在启动过程中发出修改路径的命令。

答案 1 :(得分:0)

包括一个更现代的答案。在我撰写本文时,您遇到的大多数(所有值得使用的)Cloud Foundry版本都将立即支持多个构建包。因此,您不再需要多buildpack buildpack。

相反,您可以简单地cf push并指定多个buildpack。

https://docs.cloudfoundry.org/buildpacks/use-multiple-buildpacks.html

这可以通过将多个-b标志设置为cf push或使用manifest.yml文件并执行以下操作来完成:

...
buildpacks:
  - buildpack_1
  - buildpack_2
...

无论哪种情况,都按照您列出它们的顺序执行。

https://docs.cloudfoundry.org/devguide/deploy-apps/manifest-attributes.html#buildpack

其余答案与@lamonaki的答案相同。

  • 依次调用apt-buildpack和Python buildpack。

  • 添加apt.yml文件,并在其中指出您要安装的Java软件包。

    例如@lamonaki的答案:

    --- 
    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
    
  • 添加runtime.txt来设置您要安装的Python版本

  • .profile文件添加到项目的根目录,就像apt.ymlruntime.txt一样。这样,如果您需要在Java或Python代码中引用任何自定义共享库,则为export JAVA_HOME=/home/vcap/deps/0/apt/usr/lib/jvm/java-8-openjdk-amd64/jre/export PATH=$PATH:$JAVA_HOME/bin添加行,并可能添加LD_LIBRARY_PATH

您可能在想,为什么使用apt-buildpack而不是Java buildpack。不幸的是,当前版本的Java buildpack仅支持作为最终buildpack(即buildpack列表中的最后一个buildpack)运行。因为您希望Python buildpack是最后一个,所以排除了这里的候选对象。 Java Cloud Native Buildpacks可以解决该问题,但是在我撰写本文时,没有在CF上本地运行的Cloud Native Buildpacks。