我正在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)
有谁知道如何解决这个问题?
答案 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/bin
,JAVA_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.yml
和runtime.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。