1

**编辑**

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

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

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

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

在 options.json 中。

连接到应用程序后,cf ssh我切换到应用程序目录,我称之为php/bin/php doctrine:schema:updateClassNotFound: PDO 问题。

在暂存期间,这些命令被成功调用。

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

"PHP_EXTENSIONS": [
 ...
 "pdo",
 "pdo_mysql",
 ...]

如何在一个应用上启用 CLI 和 FPM 扩展?理论上是否有可能为 CLI 和 FPM 提供不同的扩展,以及不同的 user-php.ini 来完全/特别覆盖 CLI 和 FPM 的 php.ini?

4

2 回答 2

2

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

“PHP_MODULES”:[“fpm”,“cli”]

在 options.json 中。

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

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

值得一提的是,虽然 PHP_EXTENSIONS 不再触发下载什么,但它仍然用于在 php.ini 中启用哪些扩展。因此,您仍然需要通过 Composer 设置或指示扩展。

使用 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

暂存会自动执行此操作,就像您的应用程序的运行时一样。不幸cf ssh的是没有。

更新:

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

理论上是否有可能为 CLI 和 FPM 提供不同的扩展,以及不同的 user-php.ini 来完全/特别覆盖 CLI 和 FPM 的 php.ini?

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

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

于 2016-12-08T18:12:27.453 回答
0

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

于 2016-12-07T15:46:43.683 回答