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 或更高版本
安装
将
itinerisltd.trellis_install_wp_cli_via_composer
添加到galaxy.yml
# galaxy.yml + - src: itinerisltd.trellis_install_wp_cli_via_composer + version: XXX.YYY.ZZZ # 检查最新版本!
将
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] }
安装 galaxy 角色
trellis galaxy install # 或者 ansible-galaxy install -r galaxy.yml --force
重新配置
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
这是否是幂等的或确定性的?
不是。
特定的确切包版本可能有帮助,但您需要手动管理它们。
这看起来很棒。我在哪里能找到更多类似的好东西?
- Itineris 的博客上的文章
- Itineris 的 GitHub 个人资料上的更多项目
- Itineris 和 TangRufus wp.org 个人资料上的更多插件
- 在 Twitter 上关注 @itineris_ltd 和 @TangRufus
- 雇佣 Itineris 来构建您下一个精彩网站
我在哪里可以给 :star::star::star::star::star: 评审?
谢谢!很高兴您喜欢它。让我的老板知道有人在使用这个项目是很重要的。由于这不是托管在 wordpress.org 上,请考虑:
- 发推特提及 @itineris_ltd 和 @TangRufus
- :star: 为这个 GitHub repo 点赞
- :eyes: 关注 这个 GitHub repo
- 写博客文章
- 提交 拉取请求
- 雇佣 Itineris
测试
ansible-playbook -i 'localhost,' --syntax-check tests/test.yml
反馈
请提供反馈! 我们希望让这个库在尽可能多的项目中有用。 请提交一个 问题,指出您所喜欢和不喜欢的内容,或分叉项目并提出建议。 没有问题太小。
安全
如果您发现任何与安全相关的问题,请通过电子邮件联系 [email protected],而不是使用问题跟踪器。
贡献
trellis_install_wp_cli_via_composer 是一个由 Itineris Limited 创建的项目,由 Tang Rufus 负责。
完整的贡献者列表可以在 这里 找到。
许可证
ansible-galaxy install ItinerisLtd.trellis_install_wp_cli_via_composer