【问题标题】:How to use/enable PHP extensions for CLI on swisscomdev/cloudfoundry php_buildback?如何在 swisscomdev/cloudfoundry php_buildback 上为 CLI 使用/启用 PHP 扩展?
【发布时间】:2017-07-24 21:49:09
【问题描述】:

** 编辑 **

在某些情况下,我们需要在已部署的 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:update,这会导致 ClassNotFound: PDO 问题。

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

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

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

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

【问题讨论】:

    标签: symfony cloud-foundry swisscomdev


    【解决方案1】:

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

    Staging 会自动执行此操作,就像您的应用的运行时一样。不幸的是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。

    【讨论】:

    • 哇,那是一个艰难的过程!我永远无法弄清楚!你认为有可能以某种方式将这个额外的命令添加到 cf ssh 命令中吗?因为如果它是在 staging 和应用程序运行时完成的,它看起来也应该为 cf ssh 完成。
    • 用 php buildpack 创建了一个 github 问题 - 但不确定这是否是指向问题的正确地址。 github.com/cloudfoundry/php-buildpack/issues/182
    • 据我所知,这是平台需要做的事情。其他使用 .profile.d 脚本进行环境设置(大多数)的构建包具有相同的限制。
    【解决方案2】:

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

    【讨论】:

    • 啊,这看起来棒极了 - 应该已经看到了 - 将尝试提供反馈。
    • 我提供了"PHP_MODULES": [ "fpm", "cli" ] - 但不确定它是否真的安装了 - 外观和行为与以前一样:-(
    猜你喜欢
    • 2019-08-28
    • 1970-01-01
    • 2022-07-24
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 2020-09-30
    • 2011-01-07
    • 2012-11-12
    相关资源
    最近更新 更多