** 编辑 **
对于一些情况,我们需要在部署的CloudFoundry应用程序上调用Symfony命令。Symfony命令是用php调用的PHP脚本。
一个例子是bin/console doctrine:schema:update (但可以是用户生成、缓存清除等)。
因此,对于我们的应用程序,我们需要两者,fpm和cli启用。这是通过以下方式完成的:
"PHP_MODULES": [
"fpm",
"cli"]在options.json中。
在用cf ssh连接到应用程序之后,我将更改为app目录,并将其称为php/bin/php doctrine:schema:update,这将导致ClassNotFound: PDO问题。
在暂存过程中,成功地调用了这些命令。
我检查了PHP的PDO扩展是不可用的(通过检查php -i),尽管我在options.json中提到过它。
"PHP_EXTENSIONS": [
...
"pdo",
"pdo_mysql",
...]如何在一个应用程序上启用CLI和FPM的扩展?理论上,是否有可能对CLI和FPM有不同的扩展,以及不同的用户php.ini来完全/特别地覆盖CLI和FPM的php.ini?
发布于 2016-12-08 18:12:27
因此,对于我们的应用程序,我们需要两者,fpm和cli启用。这是通过以下方式完成的: "PHP_MODULES":"fpm","cli“ 在options.json中。
这是我们应该在构建包中清理的东西。我不相信它(PHP_MODULES)真的被使用了。
也许一年多以前,构建包改变了它下载PHP的方式。它以前会下载各个组件模块和扩展。现在它只是一次下载所有的东西。这实际上是更快的结果,因为它是一个更大的下载和许多较小的下载,而且带宽通常是非常快的构建包下载。
值得一提的是,虽然PHP_EXTENSIONS不再触发下载内容,但它仍然用于在php.ini中启用哪些扩展。因此,您仍然需要通过composer设置或指示扩展。
在用cf ssh连接到应用程序之后
我相信这就是问题所在。您需要源build变量,以便正确配置env。
例如:
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,并让生命周期启动程序处理资源&设置环境。
理论上,是否有可能对CLI和FPM有不同的扩展,以及不同的用户php.ini来完全/特别地覆盖CLI和FPM的php.ini?
好的。默认情况下,我们下载并安装所有扩展。因此,您只需要一个不同的php.ini (或其他一些设置来启用该扩展),在其中您可以启用您的备用扩展集。
当您将cf ssh放入容器中时,您可以将现有的php.ini复制到其他地方,并根据您的CLI需要对其进行编辑。然后在运行CLI命令时引用php-alt.ini。
发布于 2016-12-07 15:46:43
从来没有这样做过,但是启用PHP_MODULES (https://docs.developer.swisscom.com/buildpacks/php/gsg-php-config.html)中的php会有帮助吗?
https://stackoverflow.com/questions/40999038
复制相似问题