如何在 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。
** 编辑 **
在某些情况下,我们需要在已部署的 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。