使用Composer on Vagrant时出现“无法删除”错误

时间:2014-10-06 12:40:53

标签: symfony vagrant

我有一个运行Linux的Vagrant,我正在尝试安装Symfony。

在命令composer create-project symfony/framework-standard-edition ./ "2.5.*"之后我有错误:

[RuntimeException]
  Could not delete ./.git/objects/pack/tmp_idx_llwUKb:

如果我尝试编写者更新另一个项目,我总是会遇到这种错误Could not delete

有什么想法吗?

编辑:对于另一个项目的简单sudo composer update -vvv

  - Installing sonata-project/admin-bundle (dev-master 8a022aa)
Failed to download sonata-project/admin-bundle from source: Could not delete /vagrant/crm_neo/vendor/sonata-project/admin-bundle/.git/objects/pack/tmp_idx_hchQhc:
Now trying to download from dist
  - Installing sonata-project/admin-bundle (dev-master 8a022aa)

Failed: [RuntimeException] Could not delete /vagrant/crm_neo/vendor/sonata-project/admin-bundle/.git/objects/pack/tmp_idx_hchQhc:



  [RuntimeException]
  Could not delete /vagrant/crm_neo/vendor/sonata-project/admin-bundle/.git/o
  bjects/pack/tmp_idx_hchQhc:



Exception trace:
 () at phar:///usr/local/bin/composer/src/Composer/Util/Filesystem.php:193
 Composer\Util\Filesystem->unlink() at phar:///usr/local/bin/composer/src/Composer/Util/Filesystem.php:151
 Composer\Util\Filesystem->removeDirectoryPhp() at phar:///usr/local/bin/composer/src/Composer/Util/Filesystem.php:129
 Composer\Util\Filesystem->removeDirectory() at phar:///usr/local/bin/composer/src/Composer/Util/Filesystem.php:35
 Composer\Util\Filesystem->remove() at phar:///usr/local/bin/composer/src/Composer/Util/Filesystem.php:80
 Composer\Util\Filesystem->emptyDirectory() at phar:///usr/local/bin/composer/src/Composer/Downloader/FileDownloader.php:108
 Composer\Downloader\FileDownloader->doDownload() at phar:///usr/local/bin/composer/src/Composer/Downloader/FileDownloader.php:89
 Composer\Downloader\FileDownloader->download() at phar:///usr/local/bin/composer/src/Composer/Downloader/ArchiveDownloader.php:35
 Composer\Downloader\ArchiveDownloader->download() at phar:///usr/local/bin/composer/src/Composer/Downloader/DownloadManager.php:201
 Composer\Downloader\DownloadManager->download() at phar:///usr/local/bin/composer/src/Composer/Installer/LibraryInstaller.php:156
 Composer\Installer\LibraryInstaller->installCode() at phar:///usr/local/bin/composer/src/Composer/Installer/LibraryInstaller.php:87
 Composer\Installer\LibraryInstaller->install() at phar:///usr/local/bin/composer/src/Composer/Installer/InstallationManager.php:152
 Composer\Installer\InstallationManager->install() at phar:///usr/local/bin/composer/src/Composer/Installer/InstallationManager.php:139
 Composer\Installer\InstallationManager->execute() at phar:///usr/local/bin/composer/src/Composer/Installer.php:548
 Composer\Installer->doInstall() at phar:///usr/local/bin/composer/src/Composer/Installer.php:217
 Composer\Installer->run() at phar:///usr/local/bin/composer/src/Composer/Command/UpdateCommand.php:128
 Composer\Command\UpdateCommand->execute() at phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:252
 Symfony\Component\Console\Command\Command->run() at phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php:889
 Symfony\Component\Console\Application->doRunCommand() at phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php:193
 Symfony\Component\Console\Application->doRun() at phar:///usr/local/bin/composer/src/Composer/Console/Application.php:135
 Composer\Console\Application->doRun() at phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php:124
 Symfony\Component\Console\Application->run() at phar:///usr/local/bin/composer/src/Composer/Console/Application.php:84
 Composer\Console\Application->run() at phar:///usr/local/bin/composer/bin/composer:43
 require() at /usr/local/bin/composer:15

19 个答案:

答案 0 :(得分:27)

它发生在我身上,事实证明我正在打击作曲家的超时。

你可以采取以下措施来获得一些速度:

  1. 增加作曲家进程超时(默认300 )(如果以下设置可帮助您提高速度,并非真正需要 LI>
  2. dist设置为首选安装类型。
  3. 为github启用https协议,速度更快。
  4. 〜/ .composer / config.json

    {
        "config": {
            "process-timeout":      600,
            "preferred-install":    "dist",
            "github-protocols":     ["https"]
        }
    }
    

    如果之后仍有问题,您还可以清除作曲家的缓存:

    rm -rf ~/.composer/cache
    

答案 1 :(得分:8)

在本地Homestead环境中的Laravel Framework升级练习中,我试图更新项目依赖项(使用composer update)(已运行vagrant ssh以默认的“无用”用户身份登录),没有一个该线程中的先前答案与...无关。

Could not delete /home/vagrant/projects/projectname/vendor/kylekatarnls/update-helper/src/UpdateHelper

...我反复遇到的错误消息。

对我来说唯一有效的方法是包括以下作曲家选项:

composer update --no-plugins

答案 2 :(得分:4)

我遇到了这个问题,并花了很多时间进行研究。我已经尝试了所有可能的解决方案,但没有一个对我有用。对我来说,该错误发生在具有Vagrant和VirtualBox提供程序的GNU / Linux主机上。

事实证明,这是与创建/删除文件时的文件系统层和竞争条件有关的VirtualBox bug。它仅适用于VirtualBox共享文件夹,不适用于常规文件夹。可悲的是,似乎它不会很快得到修复。

有些人报告说他们可以使用以下技巧来解决问题:

  • 降级为VirtualBox版本6.0.4
  • 使用nfsrsync而不是共享文件夹。
  • Patching作曲家在某些操作后添加一些暂停。
  • 通过--no-plugins选项禁用插件使用。

但是所有这些对我来说似乎都是肮脏的。我个人可以使用在GitHub上建议的workaround,该配置是配置composer以从源代码安装软件包。这是一种简单而干净的技巧,不会对您的工作流产生重大的负面影响。尝试将以下配置放入您的~/.config/composer/config.json中。或者,您可以根据需要相应地编辑composer.json。请记住,composer.json将覆盖您的全局配置。

{
    "config": {
        "preferred-install": "source"
    }
}

答案 3 :(得分:3)

我们也遇到了问题。有几个人似乎有这个问题,没有提供修复。有关更多信息,您可以查看vagrant-winnfsd的github issues

答案 4 :(得分:3)

配置机器时出现此问题,该机器已自举运行composer install。我只是退出虚拟机并在我的主机上的代码上运行了composer install,它运行良好。

因此,如果您在VM 中运行Composer 时遇到此问题,请尝试从VM外部运行Composer

更新:正如下面的评论所指出的,由于本地和Vagrant环境之间的系统配置不同,这可能会导致安装不同版本软件包时出现一些问题,因此请务必谨慎行事尝试这个。

答案 5 :(得分:2)

就我而言,我只使用 NFS 文件夹类型而不是共享文件夹,它可以工作:

folders:
    - map: ~/code/cs-cart-trial
      to: /home/code/cs-cart-trial
      type: "nfs"

答案 6 :(得分:2)

刚刚遇到同样的问题。

我在访问某些本地文件时看到了问题。在我的情况下,目标目录在“root”下,我不是root用户。

<强>解决方案

更改文件/目录的权限/所有者 1.重新定义所有者:

sudo chown myuser:myuser -R /path/to

2。也许你所在的团体缺乏权限。
所以,尝试运行:

sudo chmod g+rwX -R /path/to

或许你可以用“sudo”运行你的命令,如果它适合你(不推荐)。 :)

P.S。 Never use 777。这不安全。

答案 7 :(得分:0)

我发现的最好的 hack 是用下面的命令替换 unlink 命令。我正在运行 ubuntu。

sudo nano +219 /usr/share/php/Composer/Util/Filesystem.php

exec("sudo rm -rf $path"); 返回真;

答案 8 :(得分:0)

这与问题有点无关,但在我与 Docker 的情况下。失败是因为 Webpack 正在监视并且不允许删除其他文件。

当我关闭 Webpack 时它起作用了。

答案 9 :(得分:0)

Cakephp 4.2.1 也有同样的问题

错误:

<块引用>

无法删除 /var/www/vendor/cakephp/plugin-installer/src:

解决方案:

基于https://stackoverflow.com/a/63139337/1110760

在尝试了上面提到的几个选项后,对我来说这是最简单的解决方法。

<块引用>

composer install --prefer-source


参数 --no-plugins 也有效,有点。它跳过了一些包,但我的本地主机似乎工作得很好。这更快,但缺少一些。

答案 10 :(得分:0)

我已经通过创建mount解决了这个问题: 在/ home / vagrant中创建一个名为vendor的文件夹 然后应用命令:mount --bind /home/vagrant/vendor /path/to/source /供应商

答案 11 :(得分:0)

对我来说,它有助于通过命令行从下载主页https://getcomposer.org/download/上安装(新)版本。尽管我具有安装在virtualbox上的驱动器,但由于我是chmod + R 0777的root用户,因此可以排除某些文件权限。无论如何,既然新版本有效,就意味着它是版本,或者通过php phar运行新版本,并且原始bin属于root

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

答案 12 :(得分:0)

要检查的另一件事,Composer需要在其有权访问的目录的上下文中运行。

在我的情况下,我试图从/ var / www发出针对/ var / www / html的create-project命令。 / var / www由root拥有,/ var / www / html由我执行Composer的同一用户拥有(www-data)。我收到以下错误;无法删除/ var / www / html /:

从/ var / www / html本身发出了相同的Composer命令,它运行良好。

答案 13 :(得分:0)

就我而言,我正在尝试composer update,但我得到了

  

[RuntimeException]     无法删除... / vendor / bin / php-parse:

尽管我使用的是Laravel框架,但这个问题是Google中的第一个链接,所以我决定发布答案。

我的解决方案是为vendorsudo chown -R $USER:www-data vendor/
授予所有权 sudo chown -R $USER:www-data composer.json

答案 14 :(得分:0)

这与主机和来宾操作系统之间的文件夹同步有关,该文件夹可能只是暂时从主机上锁定。

解决方案只是从主机操作系统中删除有问题的.git文件夹,或重新启动计算机并再次启动composer install

理想情况下,每个操作系统都有自己的依赖项和不同的二进制文件,因此您应该将/vendor文件夹与rsync / vagrant文​​件夹共享区分开来,同样在Nodejs项目中对/node_modules执行相同操作

答案 15 :(得分:0)

对我来说,这是由作曲家超时引起的。我检查了网速,发现它降到了0.7M,几乎无法使用。在我重新连接wifi并使我的互联网连接速度恢复正常后,错误消失了。

答案 16 :(得分:0)

在我的情况下,删除插件并重新创建框解决问题。

答案 17 :(得分:0)

在AWS上,我在部署Yii框架项目时遇到了这个错误

  

的/ var /应用/电流/供应商/

文件夹我删除了里面的所有内容它回到我的文档根目录并运行作曲家更新它再次获取了所有的回购。

答案 18 :(得分:-1)

对于Windows用户

哇,我不敢相信我花了多长时间才意识到这一点,可悲的是,它已经发生过多次了,我终于写了这封笔记,以便我和其他人下次能很快康复。

  1. 只需使用Windows资源管理器删除/vendor/whatever_project_name文件夹,而不要尝试从Vagrant命令行中删除它。

  2. 然后运行composer update重新安装依赖项。