ItinerisLtd.trellis_install_wp_cli_via_composer

trellis_install_wp_cli_via_composer

Ansible Role GitHub tag (latest SemVer) Ansible Role CircleCI Ansible Quality Score GitHub License Hire Itineris Twitter Follow @itineris_ltd Twitter Follow @TangRufus

TrellisサーバーにComposerを使ってWP-CLIをインストールします。

目標

問題

[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パッケージがあります。これらの依存関係は常にpharからロードされます。その結果、バージョンはロックされています。

たとえば、WP-CLI v2.4.0のpharバンドルには、symfony/process v2.8.5が含まれています(symfony/finderの依存関係として)。my-awesome-commandsymfony/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が要求する新しいバージョンは無視されます。したがって、my-awesome-commandsymfony/processを使用しようとすると失敗します。

$ 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のベンダーフォルダから読み込まれたことを確認してください。
/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パッケージ
# デフォルト: []
# https://github.com/roots/trellis/blob/4425669bab0665f0c9aed92c80eb9b8c54f63e85/roles/wp-cli/defaults/main.yml#L10から取得
wp_cli_packages:
  - "typisttech/image-optimize-command:@stable"
  - "[email protected]:Yoast/wp-cli-faker.git"

# WP-CLIのパス
# デフォルト: /usr/bin/wp
# https://github.com/roots/trellis/blob/4425669bab0665f0c9aed92c80eb9b8c54f63e85/roles/wp-cli/defaults/main.yml#L3から取得
wp_cli_bin_path: /usr/bin/wp

# WP-CLIのbash補完パス
# デフォルト: /etc/bash_completion.d/wp-completion.bash
# https://github.com/roots/trellis/blob/4425669bab0665f0c9aed92c80eb9b8c54f63e85/roles/wp-cli/defaults/main.yml#L9から取得
wp_cli_completion_path: /etc/bash_completion.d/wp-completion.bash

要件

  • Trellis v1.3.0以降
  • Ansible v2.7.0以降
  • Python v3.7.6以降

インストール

  1. galaxy.ymlitinerisltd.trellis_install_wp_cli_via_composerを追加します。

      # 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

フィードバック

フィードバックをお願いします! このライブラリをできるだけ多くのプロジェクトで有用にしたいと考えています。何が好きか、何が嫌いかを指摘してissueを送信してください。プロジェクトをフォークして提案をすることもできます。小さな問題も大歓迎です。

セキュリティ

セキュリティに関連する問題を発見した場合は、issueトラッカーを使用するのではなく、[email protected]にメールしてください。

クレジット

trellis_install_wp_cli_via_composerは、Itineris Limitedのプロジェクトで、Tang Rufusによって作成されました。

貢献者の完全なリストはこちらで見ることができます。

ライセンス

trellis_install_wp_cli_via_composerMITライセンスの下でリリースされています。

プロジェクトについて

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