所以对于我们的应用程序,我们需要同时启用 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。