将文件上传到 bluemix 应用程序并从配置文件指向它们

Uploading files to a bluemix app and pointing to them from configuration files

我正在尝试将文件上传到我的 bluemix 应用程序,但我在使用和理解文件系统时遇到问题。成功上传文件后,我想在我的配置文件中提供它们的路径。

具体来说,我想上传一个 jar 文件到服务器,稍后将其用作 java 代理。

我已经尝试从几个方向处理这个问题。 我看到我可以在 liberty_buildpack 中创建一个文件夹并将文件放入其中我可以稍后在编译发布阶段从 tmp 文件夹访问它:

/tmp/buildpacks/ibm-websphere-liberty-buildpack/lib/liberty_buildpack/my_folder

我还可以看到,在构建和部署应用程序时看到的文件系统中,我只能复制到位于以下位置的文件夹:

/app

所以我将 JAR 文件复制到应用程序文件并使用 2 种方法将其设置为 java代理:

  1. 使用 java 代理手动设置环境变量 JAVA_OPTS 以指向 /app/myjar.jar 使用 cf set-env
  2. 使用来自 wlp 服务器的 cf push 部署应用程序的 war 文件,并在 server.xml 文件和属性 genericJvmArguments 中设置 java 代理

这两种方法都不起作用,要么应用程序的部署阶段失败了,要么我的功能根本不起作用。

所以我尝试使用 cf files 搜索应用程序文件系统并找到 app 文件夹,但奇怪的是它没有与我部署的文件夹相同的文件,我不能'找不到与构建包的已部署文件夹的任何连接。

有人可以解释一下应该如何正确完成吗?即,上传文件然后我应该如何从环境 variable/server 文件中指向它? 我的意思是它应该是 /app/something 还是其他路径? 我还看到使用 @droplet.sandbox 之类的相对路径可能是解决这些文件的方法?以及我应该如何从 cf files

访问这些文件夹

谢谢。

编辑: 正如我在评论中所指示的那样,我已将 jar 文件添加到系统中,问题是当我将 javaagent 变量添加到环境变量 JAVA_OPTS 时,部署阶段失败并出现超时错误: 有效载荷:{... "reason"=>"CRASHED", "exit_status"=>32, "exit_description"=>"failed to accept connections within health check timeout", "crash_timestamp"=> 1433864527}

我分配java代理的方式如下:

cf set-env myApp JAVA_OPTS "path/agent.jar"

我试过添加几个位置: 1. 我发现如果我将 jar 文件添加到我的 WebContent 文件夹中,我可以在以下位置找到它:/app/wlp/usr/servers/defaultServer/apps/myapp.war/resources/ 2.我在编译阶段把/tmp位置的jar文件复制到/home/vcap/app/agent.jar 3. 我已经在 /app/.java/jre/lib

中找到了 jar 文件 这 3 条路径中的

none 有效。 我发现如果我给出错误的路径,系统的行为是一样的,所以它可能是路径问题。 有什么想法吗?

不确定这是否是正确的答案,但我在我的 Liberty 应用程序中使用了额外的 jar 文件,所以这可能会有所帮助。

我将一个 myapp.war 文件推送到 bluemix。在 war 文件中,在 WEB-INF 文件夹中,我有一个 lib 文件夹,其中包含许多 jar 文件。这些 jar 文件中的 类 然后在我的应用程序的 java 代码中使用。

myapp.war/WEB-INF/lib/myPlugin.jar

您可以尝试使用所需的 jar 文件执行类似的操作,将它们构建到 war 文件中。

除此之外,您可以尝试使用 bluemix liberty documentation 中的 Overlaying the JRE 部分将 jars 添加到 JRE。

试试这个:

  1. 将代理 jar 放在 WAR 包内名为“.profile.d”的文件夹中;
  2. cf se your-app JAVA_OPTS -javaagent:/home/vcap/app/.profile.d/your.jar ;
  3. 将 war 推送到 Bluemix。