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

Clé*_*aud 32 symfony vagrant

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

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

[RuntimeException]
  Could not delete ./.git/objects/pack/tmp_idx_llwUKb:
Run Code Online (Sandbox Code Playgroud)

如果我尝试编写更新另一个项目,我总是会遇到这种错误 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
Run Code Online (Sandbox Code Playgroud)

Ale*_*chi 31

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

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

  1. 增加作曲家进程超时(默认为300)(如果以下设置可以帮助您获得速度,但不会受到伤害,则不需要)
  2. 设置dist为首选安装类型.
  3. https为github 启用协议,速度更快.

〜/ .composer/config.json

{
    "config": {
        "process-timeout":      600,
        "preferred-install":    "dist",
        "github-protocols":     ["https"]
    }
}
Run Code Online (Sandbox Code Playgroud)

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

rm -rf ~/.composer/cache
Run Code Online (Sandbox Code Playgroud)


Kol*_*nya 9

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

事实证明,这是一个与文件系统层和创建/删除文件时的竞争条件相关的VirtualBox 错误。它仅发生在 VirtualBox 共享文件夹中,而不发生在常规文件夹中。可悲的是,它似乎不会很快得到修复。

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

  • 降级到 VirtualBox 版本6.0.4
  • 使用nfsrsync代替共享文件夹。
  • 修补作曲家以在某些操作后添加一些暂停。
  • 使用--no-plugins选项禁用插件使用。

但这一切对我来说都是肮脏的。我个人能够使用GitHub 上建议的解决方法,即配置 composer 从源安装包。这是一个简单而干净的技巧,不会对您的工作流程产生显着的负面影响。尝试将以下配置放入您的~/.config/composer/config.json. 或者,您可以composer.json根据需要相应地编辑您的内容。请记住,这composer.json将覆盖您的全局配置。

{
    "config": {
        "preferred-install": "source"
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然你的“config”选项确实对我来说是可行的解决方案,但我不能凭良心投票赞成这个答案,因为它很奇怪“Duh,切换到 Docker!” 心理。有时,vagrant 机器可能很复杂,并且没有 Docker 等效项。更奇怪的是,除了标题之外,你实际上在答案中根本没有提到 Docker!编辑:无论如何,我对答案投了赞成票,因为它确实解决了问题,但在我看来,标题在这里没有位置。 (4认同)

Kir*_*rby 6

刚刚遇到同样的问题。

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

解决方案

更改文件/目录的权限/所有者。

  1. 重新定义所有者:

    须藤 chown myuser:myuser -R /path/to

  2. 也许您所在的组缺少权限。
    因此,尝试运行:

    须藤 chmod g+rwX -R /path/to

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

PS永远不要使用 777。它不安全。

UPD1

另一件事,您可能会发现解决问题的根源很有用,包装composer二进制文件以始终代表某个用户运行它。

$ cat /usr/local/bin/composer
#!/bin/bash

# run composer behalf www-data user

set -o pipefail
set -o errexit
set -o nounset
#set -o xtrace

[[ "${DEBUG:-}" = "true" ]] && set -o xtrace || true

composer_debug=$([[ 'true' != "${COMPOSER_DEBUG:-}" ]] || echo '-vvv' )

sudo -u www-data -- /usr/bin/composer ${composer_debug:-} $@
Run Code Online (Sandbox Code Playgroud)


aal*_*aap 5

在配置机器时遇到了这个问题,该机器被引导运行composer install。我只是退出了VM,然后composer install在主机上运行了代码,它就起作用了。

因此,如果在VM内运行Composer时遇到此问题,只需尝试从VM外部运行Composer即可。

更新:正如下面的评论中指出的那样,由于本地和Vagrant环境之间的系统配置不同,这可能会导致安装不同版本的软件包时出现一些问题,因此在尝试此操作时要格外小心。


w5m*_*w5m 5

I was trying to update project dependencies (using composer update) during a Laravel Framework upgrade exercise in my local Homestead environment (having run vagrant ssh to login as the default "vagrant" user) and none of the previous answers in this thread made any difference to the...

Could not delete /home/vagrant/projects/projectname/vendor/kylekatarnls/update-helper/src/UpdateHelper
Run Code Online (Sandbox Code Playgroud)

...error message I repeatedly encountered.

The only thing that worked for me was to include a composer option as follows:

composer update --no-plugins
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用,但它随后跳过了一些必需的包(cakephp 4.x)。当我使用“--prefer-source”时,它会安装所有内容,但速度很慢... (3认同)
  • 天哪,你太棒了! (2认同)
  • 我在使用 TYPO3 v9.5 时遇到了这个问题。这个选项解决了它。谢谢! (2认同)