21
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

composer で Could not delete エラーで先に進めなくなった場合の対処法

Last updated at Posted at 2016-02-12

概要

composer installCould not delete というエラーで先に進めなくなった場合の対処とその原因について説明します。

問題の現象

composer install で下記のようなエラーで中断してしまうことがあります。


  [RuntimeException]
  Could not delete /var/www/html/php-csv-file-iterator/vendor/phpoffice/phpexcel/.git/objects/pack/tmp_pack_Z4npdu:

その後は何度リトライしても、同じエラーが出て先に進めません。
sudo rm /var/www/html/php-csv-file-iterator/vendor/phpoffice/phpexcel/.git/objects/pack/tmp_pack_Z4npdu をしても Text file busy と言われて消すことも出来ません。

何が起こっているのか

前述の例でいえば、phpexcel を clone 中に composer がタイムアウトした可能性が高いです。
タイムアウトの後の処理としてディレクトリを削除しようとしますが、
裏ではまだ git clone が動いているのでディレクトリは消せず、エラーとなっています。

試しに、ps aux | grep git を実行してみると composer は終了しているのにプロセスが生きていることが判ると思います。

vagrant  16169  0.3  0.1  16220  1580 pts/2    S    14:59   0:01 git clone --no-checkout git://github.com/PHPOffice/PHPExcel.git /var/www/html/php-csv-file-iterator/vendor/phpoffice/phpexcel
vagrant  16170  0.5  0.0  16220   516 pts/2    S    14:59   0:01 git clone --no-checkout git://github.com/PHPOffice/PHPExcel.git /var/www/html/php-csv-file-iterator/vendor/phpoffice/phpexcel
vagrant  16171  2.2  0.2  11552  2424 pts/2    S    14:59   0:07 git index-pack --stdin --fix-thin --keep=fetch-pack 16169 on localhost.localdomain
vagrant  16201  0.0  0.0 103240   868 pts/2    S+   15:04   0:00 grep git

このプロセスを kill 16169 で終了させれば composer は無事にディレクトリを消せるようになります。

ですが、このまま再実行してもまたタイムアウトする可能性は高いでしょう。

composer のタイムアウト時間を伸ばす

タイムアウトのデフォルトは 300 秒 (5分) です。
vi ~/.composer/config.json で設定ファイルを開き、下記のように "process-timeout": 1200 を書き加えます。
こうすることでタイムアウト時間は 20 分にまで延長されます。

{
    "config": {
        "process-timeout": 1200
    }
}

一時的に回線が遅い場合など、今回だけ伸ばしたいのであれば、

export COMPOSER_PROCESS_TIMEOUT=1200

composer install の前に実行しても構いません。

こうして再実行

これで再度 composer install を実行すれば大丈夫なはず。

ただし、なんらかの原因で ~/.composer/cache が壊れてしまっていて、再実行もエラーになることがあるようです。
その場合には、 rm -rf ~/.composer/cache composer clear-cache を実行してから、改めて composer install を実行すれば大丈夫です。(2016-02-16 sizuhiko さんの指摘で修正)

21
15
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?