ItinerisLtd.trellis_install_wp_cli_via_composer

通过 Composer 在 Trellis 服务器上安装 WP-CLI

安装 WP-CLI 通过 Composer 在 Trellis 服务器上。

目标

问题

[自 WP-CLI v2.0.0 起,] 最麻烦的一套依赖,即对旧版本 Symfony 的强硬要求,已经消失。我们仍然拥有的唯一 Symfony 组件是 symfony/finder,因为对此没有上限版本限制。

-- https://make.wordpress.org/cli/2018/08/08/wp-cli-v2-0-0-release-notes/

然而,WP-CLI 的 phar 包附带了 WP-CLI 的依赖。这些依赖始终是从 phar 中加载的。因此,它们的版本是被“锁定”的。

例如:WP-CLI v2.4.0 的 phar 包附带了 symfony/process v2.8.5(作为 symfony/finder 的依赖)。假设我们有 my-awesome-command,它需要 symfony/process:5.0.0$ wp package install my-awesome-command 按预期安装 symfony/process v5.0.0。然而,symfony/process v2.8.5(来自 WP-CLI phar)将始终被使用;my-awesome-command 所需的更新版本被忽略。因此,当尝试使用 symfony/process 时,my-awesome-command 失败。

$ wp shell

wp> $reflector = new \ReflectionClass('Symfony\Component\Process\Process');
=> object(ReflectionClass)#2801 (1) {
  ["name"]=>
  string(33) "Symfony\Component\Process\Process"
}
wp> echo $reflector->getFileName(); // 注意它是从 WP-CLI phar 中加载的。
phar:///usr/bin/wp/vendor/symfony/process/Process.php

这个问题影响 symfony/finder 及其依赖。

解决方案

通过 Composer 安装 WP-CLI 解决了这个问题。

$ wp shell

wp> $reflector = new \ReflectionClass('Symfony\Component\Process\Process');
=> object(ReflectionClass)#2801 (1) {
  ["name"]=>
  string(33) "Symfony\Component\Process\Process"
}
wp> echo $reflector->getFileName(); // 注意它是从 Composer 的 vendor 文件夹中加载的。
/home/web/.composer/vendor/symfony/process/Process.php

角色变量

# 在安装 WP-CLI 之前要删除的 Composer 包
# 默认: []
wp_cli_composer_global_remove_packages:
  - wp-cli/wp-cli-bundle
  - psy/psysh

# 要安装的 Composer 包
# 默认: "wp-cli/wp-cli-bundle:{{ wp_cli_version }}"
wp_cli_composer_global_require_packages:
  - "wp-cli/wp-cli:2.4.0"
  - "wp-cli/package-command:^2"
  - "psy/psysh:^0.9.12"
  - "xxx/yyy:'^1.2.3 || ^2.2.3'"

# 要安装的 WP-CLI 包
# 默认: []
wp_cli_packages:
  - "typisttech/image-optimize-command:@stable"
  - "[email protected]:Yoast/wp-cli-faker.git"

# WP-CLI 路径
# 默认: /usr/bin/wp
wp_cli_bin_path: /usr/bin/wp

# WP-CLI Bash 完成路径
# 默认: /etc/bash_completion.d/wp-completion.bash
wp_cli_completion_path: /etc/bash_completion.d/wp-completion.bash

需求

  • Trellis v1.3.0 或更高版本
  • Ansible v2.7.0 或更高版本
  • Python v3.7.6 或更高版本

安装

  1. itinerisltd.trellis_install_wp_cli_via_composer 添加到 galaxy.yml

      # galaxy.yml
    
    + - src: itinerisltd.trellis_install_wp_cli_via_composer
    + version: XXX.YYY.ZZZ # 检查最新版本!
    
  2. wp-cli 角色替换为 itinerisltd.trellis_install_wp_cli_via_composer

      # server.yml
    
    - - { role: wp-cli, tags: [wp-cli] }
    + - { role: itinerisltd.trellis_install_wp_cli_via_composer, tags: [wp-cli] }
    
  3. 安装 galaxy 角色

    trellis galaxy install
    # 或者
    ansible-galaxy install -r galaxy.yml --force
    
  4. 重新配置

    trellis provision production
    # 或者
    ansible-playbook server.yml -e env=production
    

常见问题解答

如何仅安装某些命令而不是整个 WP-CLI 包?

默认情况下,将安装整个 WP-CLI 包(wp-cli/wp-cli-bundle)。如果您想保持服务器的精简,只需选择性安装命令包:

wp_cli_composer_global_remove_packages:
  - wp-cli/wp-cli-bundle

wp_cli_composer_global_require_packages:
  # 必需: WP-CLI 框架
  - "wp-cli/wp-cli:^2.4"
  # 仅安装您需要的命令:
  - "wp-cli/core-command:^2"
  - "wp-cli/cron-command:^2"
  - "wp-cli/db-command:^2"
  - "wp-cli/package-command:^2"

当 Composer 因为版本冲突而无法安装包时该怎么办?

仔细检查现有的 composer 包。然后,通过 角色变量 更改 版本约束。您可能需要卸载一些包。

这些命令对您有帮助:

composer global show
cat $(composer config --global --absolute home)/composer.json

wp package list
cat $(wp package path)/composer.json

如何验证 WP-CLI 是否通过 Composer 安装?

# 不好: 通过 Trellis 安装,即 phar
$ wp cli info
WP-CLI root dir:	phar://wp-cli.phar/vendor/wp-cli/wp-cli
# 好: 通过此角色安装,即 composer
$ wp cli info
WP-CLI root dir:	/home/web/.composer/vendor/wp-cli/wp-cli

这是否是幂等的或确定性的?

不是。

特定的确切包版本可能有帮助,但您需要手动管理它们。

这看起来很棒。我在哪里能找到更多类似的好东西?

我在哪里可以给 :star::star::star::star::star: 评审?

谢谢!很高兴您喜欢它。让我的老板知道有人在使用这个项目是很重要的。由于这不是托管在 wordpress.org 上,请考虑:

测试

ansible-playbook -i 'localhost,' --syntax-check tests/test.yml

反馈

请提供反馈! 我们希望让这个库在尽可能多的项目中有用。 请提交一个 问题,指出您所喜欢和不喜欢的内容,或分叉项目并提出建议。 没有问题太小。

安全

如果您发现任何与安全相关的问题,请通过电子邮件联系 [email protected],而不是使用问题跟踪器。

贡献

trellis_install_wp_cli_via_composer 是一个由 Itineris Limited 创建的项目,由 Tang Rufus 负责。

完整的贡献者列表可以在 这里 找到。

许可证

trellis_install_wp_cli_via_composer 根据 MIT 许可证 发布。

关于项目

Install WP-CLI via composer on Trellis servers

安装
ansible-galaxy install ItinerisLtd.trellis_install_wp_cli_via_composer
许可证
mit
下载
237
拥有者
We’re a full-service digital marketing agency that partners with ambitious clients to help them grow