Symfony 如何在swisscomdev/cloudfoundry PHP_构建中使用/启用用于CLI的PHP扩展?
**编辑** 在某些情况下,我们需要在部署的CloudFoundry应用程序上调用Symfony命令。Symfony命令是使用PHPCLI调用的php脚本 一个例子是Symfony 如何在swisscomdev/cloudfoundry PHP_构建中使用/启用用于CLI的PHP扩展?,symfony,cloud-foundry,swisscomdev,Symfony,Cloud Foundry,Swisscomdev,**编辑** 在某些情况下,我们需要在部署的CloudFoundry应用程序上调用Symfony命令。Symfony命令是使用PHPCLI调用的php脚本 一个例子是bin/console原则:schema:update(但可能是用户生成、缓存清除等) 因此,对于我们的应用程序,我们需要同时启用fpm和cli。这是通过以下方式完成的: "PHP_MODULES": [ "fpm", "cli"] 在options.json中 "PHP_EXTENSIONS": [ ... "pdo",
bin/console原则:schema:update
(但可能是用户生成、缓存清除等)
因此,对于我们的应用程序,我们需要同时启用fpm和cli。这是通过以下方式完成的:
"PHP_MODULES": [
"fpm",
"cli"]
在options.json中
"PHP_EXTENSIONS": [
...
"pdo",
"pdo_mysql",
...]
使用cf ssh
连接到应用程序后,我更改到应用程序目录,并调用php/bin/php-doctor:schema:update
这会导致ClassNotFound:PDO问题
在转移期间,这些命令被成功调用
我检查了PHPCLI的PDO扩展不可用(通过检查PHP-I),尽管我在options.json中提到了它
"PHP_EXTENSIONS": [
...
"pdo",
"pdo_mysql",
...]
如何在一个应用程序上启用CLI和FPM扩展?从理论上讲,是否有可能对CLI和FPM进行不同的扩展,以及使用不同的user-php.ini来完全/特别地覆盖CLI和FPM的php.ini?从来没有这样做过,但在php_模块()中启用php CLI是否有帮助 因此,对于我们的应用程序,我们需要同时启用fpm和cli。这是通过以下方式完成的:
"PHP_MODULES": [
"fpm",
"cli"]
“PHP_模块”:[“fpm”,“cli”]
在options.json中
"PHP_EXTENSIONS": [
...
"pdo",
"pdo_mysql",
...]
这可能是我们应该在构建包中清理的内容。我不相信它的(PHP_模块)实际使用了更多
也许一年多以前,构建包改变了下载PHP的方式。它以前会下载单个组件、模块和扩展。现在它只需一次下载所有内容。这实际上会更快,因为它是一个较大的下载,而不是许多较小的下载,而且构建包下载的带宽通常非常快
值得一提的是,虽然PHP_扩展不再触发要下载的内容,但它仍然在PHP.ini中启用了哪些扩展。因此,您仍然需要通过composer设置或指示扩展
使用cf ssh连接到应用程序后
我相信这就是问题所在。您需要获取构建包环境变量的源代码,以便正确配置环境
例:
登台和应用程序的运行时一样自动执行此操作。不幸的是,cf ssh
没有
更新:
一个稍微简单的方法是运行cf ssh myapp-t-c”/tmp/lifecycle/launcher/home/vcap/app bash''
。这将打开一个bashshell,它让lifecycle launcher处理环境的寻源和设置
从理论上讲,是否有可能对CLI和FPM进行不同的扩展,以及使用不同的user-php.ini来完全/特别地覆盖CLI和FPM的php.ini
当然。默认情况下,我们下载并安装所有扩展。因此,您只需要一个不同的php.ini(或启用该扩展的其他设置),在其中启用备用扩展集
当您将
cf ssh
复制到容器中时,您可以将现有的php.ini复制到其他地方,并根据您的CLI需要对其进行编辑。然后在运行CLI命令时引用该php-alt.ini。啊,看起来很棒-应该看到这一点-将尝试提供反馈。我提供了“php\u模块”:[“fpm”,“CLI”]
-但不确定它是否真的安装了-外观和行为与以前一样:-(哇,这真是一个难题!我一直没能弄明白!你认为有可能以某种方式将这个额外的命令添加到cf ssh命令中吗?因为如果在登台和应用程序运行时完成,它看起来也应该为cf ssh完成。在php buildpack中创建了一个github问题-但不确定这是否是正确的地址。)将问题指向。据我所知,这是平台需要做的事情。其他使用.profile.d
脚本进行环境设置的构建包(大多数)也有相同的限制。