0

我开发了一个需要一些额外组件的 CIO Blumix Cloud Foundry PHP 应用程序。

我使用https://github.com/cloudfoundry/php-buildpack进行构建。我在它的文档中读到我可以添加自己的扩展。我这样做并添加了一个 tar.tgz 并在 extension.py 中添加了如何安装它的说明。

目标位置是:/home/vcap/。我看到安装运行正常,并且在部署阶段看到了该文件夹(在 DevOps Pipelines 部署阶段日志和历史记录中)。

但是当部署通过并且我使用已部署的 php 页面读取该文件夹时,我发现它不存在。我在部署日志中阅读了“容器已成功销毁”消息。也许整个安装环境都被破坏了?部署文件结构中的哪个安全位置可以安装组件,以便在部署通过后它们仍然存在?

我正在使用def compile(install):来放置我的 unix 命令。示例:os.system('ls')列出安装文件夹的内容。他们工作正常。

提前谢谢!

4

1 回答 1

1

您的应用程序使用两种完全不同的环境:暂存和运行时。暂存是构建包运行的地方,而运行时是运行暂存产品(即您的应用程序)的地方。

不幸的是,暂存和运行时的路径并不相同。在运行时,您的应用程序位于/appor下/home/vcap/app(前者是后者的符号链接)。分期不同。有一个/home/vcap目录,但它不用于任何东西。

相反,buildpack 脚本是通过 cli 参数提供的路径。这都记录在这里

作为PHP buildpack 扩展,您可以通过查看 buildpack 维护的上下文来访问 cli 参数和许多其他内容。这会直接传递到 buildpack 扩展方法中,例如service_environment& service_commands。buildpack 扩展方法略有不同,因为传入的compile参数不是内容,但该参数确实具有对上下文的引用(它是install.builder._ctx)。

说了这么多,我现在不建议使用 PHP buildpack 扩展。buildpack 正在被重写,并且该功能正在被删除。它不会有直接的替代品,但最接近的是Composer 执行脚本的能力。我的建议是看看您是否可以使用 Composer 功能。它将更便携,因为它不依赖于 buildpack 的特定行为。

于 2018-07-19T17:40:04.127 回答