2019年8月3日に、Composer1.9がリリースされていて、その中で Composer\Config::disableProcessTimeout
ヘルパが便利そうであった。
Composer のコマンドの実行タイムアウトは通常 300秒
Composer では、通常コマンドのタイムアウトが300秒に設定されている。
このため、scripts
に、開発用サーバ起動コマンドなどを設定しようものなら、5分で強制終了されてしまう。
scripts
によるスクリプトの定義は、以下などを参照されたし
composer.json
{
"scripts": {
"server": "php -S localhost:8080 -t public/"
}
}
$ composer server
> php -S localhost:8080 -t public/
-> 5分後、サーバが勝手に止まります。悲しい。
タイムアウト無効化・変更する技 (1.8以前)
以下の設定を0秒にすることで、無効化できます。下に行くほど優先度が高い (設定が上書きされる) です。
- composer 設定の、
process-timeout
を設定する。-
composer config process-timeout 0
にとすることで、composer.json にタイムアウトが無効化される設定が書き出される。ただし、当該プロジェクト全体で適用されてしまうので、都合が悪い場合があるし、ドキュメント等でその方法を示す必要がある。
-
-
COMPOSER_PROCESS_TIMEOUT
環境変数を設定する。-
COMPOSER_PROCESS_TIMEOUT=0 composer server
で起動することで、当該コマンドに限りタイムアウト設定を無効化できる。ドキュメント等でその方法を示す必要がある。
-
-
run-script
で--timeout
オプションを設定する。-
composer run-script --timeout 0 server
で起動することで、当該コマンドに限りタイムアウト設定を無効化することができる。ドキュメント等でその方法を示す必要がある。
-
と、すべてドキュメント等に記載しないとワークしない方法の数々です。スクリプトの共有を楽にするはずが、これではよくありません。
Composer\Config::disableProcessTimeout
ヘルパによる無効化
そこで、登場したヘルパはスクリプトとして記載することで、そのスクリプトに限りタイムアウト設定を無効化することができるスグレモノです。
このヘルパは、上記の設定等中で最優先されます。
composer.json
{
"scripts": {
"server": [
"Composer\\Config::disableProcessTimeout",
"php -S localhost:8080 -t public/"
]
}
}
$ composer server
> Composer\Config::disableProcessTimeout
> php -S localhost:8080 -t public/
→ タイムアウトしなーい。
もちろん、Composer1.8以前だと以下のようなエラーが出るので、このエラーが出る場合は compser self-update
を忘れずに。 (1敗)
Method Composer\Config::disableProcessTimeout is not callable, can not call server script