如何在 swisscomdev/cloudfoundry php_buildback 上 use/enable PHP CLI 扩展?

How to use/enable PHP extensions for CLI on swisscomdev/cloudfoundry php_buildback?

** 编辑 **

在某些情况下,我们需要在已部署的 CloudFoundry 应用程序上调用 Symfony 命令。 Symfony 命令是 php 脚本,使用 PHP CLI 调用。

一个例子是bin/console doctrine:schema:update(但可能是用户生成、缓存清除等)

因此对于我们的应用程序,我们需要同时启用 fpm 和 cli。这是通过以下方式完成的:

  "PHP_MODULES": [
"fpm",
"cli"]

在 options.json.

使用 cf ssh 连接到应用程序后,我切换到应用程序目录并调用 php/bin/php doctrine:schema:update 这导致 ClassNotFound:PDO 问题。

在暂存过程中成功调用了这些命令。

我检查了 PHP CLI 的 PDO 扩展不可用(通过检查 php -i),尽管我在 options.json.

中提到过它
"PHP_EXTENSIONS": [
 ...
 "pdo",
 "pdo_mysql",
 ...]

如何在一个应用程序上启用 CLI 和 FPM 的扩展?理论上是否可以对 CLI 和 FPM 进行不同的扩展,以及对 fully/particularly 覆盖 CLI 和 FPM 的 php.ini 的不同用户 php.ini?

从未这样做过,但在 PHP_MODULES (https://docs.developer.swisscom.com/buildpacks/php/gsg-php-config.html) 中启用 php cli 有帮助吗?

So for our app we need both, fpm and cli enabled. This is done with:

"PHP_MODULES": [ "fpm", "cli"]

in options.json.

这是我们应该在构建包中清理的东西。我不相信它 (PHP_MODULES) 实际上已经被使用了。

也许一年或更早以前,构建包改变了它的下载方式 PHP。它以前会下载单独的组件模块和扩展。现在它只是一次下载所有内容。这实际上最终会更快,因为它是一个较大的下载与许多较小的下载,而且构建包下载的带宽通常非常快。

值得一提的是,虽然 PHP_EXTENSIONS 不再触发下载内容,但它仍用于 php.ini 中启用的扩展。因此,您仍然需要通过 composer 进行设置或指示扩展。

After connecting to the app with cf ssh

我认为这就是问题所在。您需要获取构建包环境变量,以便正确配置环境。

例如:

vcap@359b74ff-686c-494e-4a1e-46a9c420f262:~$ php
bash: php: command not found

vcap@359b74ff-686c-494e-4a1e-46a9c420f262:~$ HOME=$HOME/app source app/.profile.d/bp_env_vars.sh
vcap@359b74ff-686c-494e-4a1e-46a9c420f262:~$ php -v
PHP 5.6.26 (cli) (built: Oct 28 2016 22:24:22)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

Staging 会像 运行time 一样为您的应用程序自动执行此操作。不幸的是 cf ssh 没有。

更新:

一个更简单的方法是 运行 cf ssh myapp -t -c "/tmp/lifecycle/launcher /home/vcap/app bash ''"。这将打开一个 bash shell 并让生命周期启动器处理采购和设置环境。

And is it theoretically possible to have different extensions for CLI and FPM and as well different user-php.ini s to fully/particularly override php.ini of CLI and FPM?

当然可以。默认情况下,我们下载并安装所有扩展。因此,您只需要一个不同的 php.ini(或启用该扩展的其他设置),您就可以在其中启用备用扩展集。

当您 cf ssh 进入容器时,您可以将现有的 php.ini 复制到其他地方并根据您的 CLI 需要进行编辑。然后在 运行 您的 CLI 命令时引用 php-alt.ini。