Symfony 自我更新失败

Symfony self-update failing

当我执行 symfony self-update 时出现以下错误 - 我该如何解决?

Backup failed, rename D:\SERVER\Symfony\symfony.exe C:\Users\FairyWilbury\.symfo
ny\autoupdate19-07-19_14-57-14-79024bb-old: The system cannot move the file t
o a different disk drive.. Canceling upgrade.

更新。 我刚刚意识到最新的 symfony 版本似乎是 4.3,4.4 将于 11 月发布 https://symfony.com/roadmap/4.4 然而,每当我 运行 symfony new --full %projectName% 它建议我应该更新到 4.6(然后无法如上所述更新)。命令行截图:这个问题是什么?

好吧,看,在这种情况下,我真的找不到任何关于这个 symfony self-update 的东西,所以...

版本标题中的第三部分(即4.6.1中的1)是一个补丁,只包含bug修复,所以你首先需要最新的次要版本4.6.0

基本上你需要遵循这个文档: symfony/doc/upgrade_patch.html

并且,从上面开始,首先您需要(认真)遵循此文档: symfony/doc/4.2/upgrade_minor.html

这个upgrade_minor.html写:The composer.json file is configured to allow Symfony packages to be upgraded to patch versions.,所以...

首先,您混淆了 Symfony 本地 Web 服务器Symfony PHP 框架。您可以使用 Web 服务器,它是一个单一的可执行命令行开发工具,来启动一个新的基于 Symfony 的项目或启动一个本地服务器,使您的 Web 应用程序在开发时可用于测试和调试。另一方面,框架是您构建 Web 应用程序的代码库。

当你运行

symfony self-update

从命令行,您(尝试)更新网络服务器,而不是框架。

在撰写本文时,Web 服务器的最新版本是 4.12.10,而框架是 5.0.5(或 4.4.5),因此,如您所见,它们完全相互独立。

回到最初的问题,我也为此苦苦挣扎,问题是我们都使用 Windows 并将网络服务器 (symfony.exe) 安装到驱动器 D 中的文件夹中: (在你的例子中是 D:\SERVER\Symfony)。在 运行ning 期间,它会将配置和其他文件存储在 Windows 用户帐户 (C:\Users\FairyWilbury) 文件夹中的“.symfony”目录中。在自我更新过程中,这是它尝试移动原始 symfony.exe 文件的地方。由于某些未知原因,它不能在不同的驱动器之间执行此操作,即使是在具有管理员权限的命令行 window 中也是如此。

奇怪的是,我找到的唯一解决方案如下。

  1. 我在驱动器 C:
  2. 上创建了一个 TEMP 文件夹
  3. 已从驱动器 D: 上的文件夹复制symfony.exe 到 C:\TEMP
  4. 打开命令行,将当前目录切换到C:\TEMP
  5. 运行 symfony self-update -- 这次很顺利
  6. 关闭命令行window
  7. 将新的 symfony.exe 文件从 C:\TEMP 移动到驱动器 D:
  8. 上的文件夹
  9. 删除了 C:\TEMP 文件夹

我知道这有点麻烦,但我们必须考虑到 Windows 不是 PHP 应用程序最流行的开发平台。 ;)

此命令帮助我更新了 symfony 二进制文件:

sudo symfony self-update