【问题标题】:CakePHP: upgrade from 3.9.x to 4.0: bin/cake upgrade rector --rules phpunit80 HangsCakePHP:从 3.9.x 升级到 4.0:bin/cake 升级 rector --rules phpunit80 挂起
【发布时间】:2020-05-30 04:48:14
【问题描述】:

我正在将 CakePHP 3 应用程序升级到 CakePHP 4,并遵循升级指南。

但是,bin/cake upgrade rector --rules phpunit80 <path/to/app/tests> 工具挂起。

一点背景知识,我的应用程序主要是用 CakePHP 3.6 制作的。我将其升级到 3.7,然后是 3.8,然后是 3.9,并在尝试升级到 4 之前确保一切正常(没有弃用警告)。

我正在关注CakePHP 4.0 upgrade guide。所有步骤都成功到“应用 Rector Refactorings”。

当我运行这个时:

PS C:\xampp\htdocs\my_app\upgrade> bin/cake upgrade rector --rules phpunit80 C:\xampp\htdocs\my_app\tests

我得到这个结果:

Rector v0.7.26

那么,

0/189 [>---------------------------]   0%

它只是挂在那里(大约 1 小时)。

对于如何解决这个问题有什么建议吗?

谢谢! D.

【问题讨论】:

  • 补充一点... bin/cake upgrade rect --rules cakephp40 命令也会发生同样的事情。
  • "(无弃用警告)" 你确定吗?在尝试迁移到 4.x 之前,您是否尝试过 composer cs-check、composer cs-fix、phpstan?
  • 可能有错误被吞下,检查你的 CakePHP 日志和你的一般 PHP 错误日志。
  • 感谢您的回复。我的 CakePHP 日志中的唯一错误是:错误:[Cake\Routing\Exception\MissingControllerException] 找不到控制器类字体。 (C:\xampp\htdocs\my_app\vendor\cakephp\cakephp\src\Http\ControllerFactory.php:105) composer cs-check 产生:'phpcs' 不是内部或外部命令、可运行程序或批处理文件.脚本 phpcs --colors --parallel=16 -p -s src/tests/ 处理返回错误代码 1 的 cs-check 事件
  • OK... 在我的应用程序目录中运行 composer cs-check 会产生几个问题。第一个是:弃用通知:C:\xampp\htdocs\my_app\vendor\cakephp\plugin-installer\src\Installer\PluginInstaller.php:170 > phpcs --colors 中弃用了带花括号的数组和字符串偏移访问语法-p --standard=vendor/cakephp/cakephp-codesniffer/CakePHP src/tests/

标签: cakephp cakephp-4.x rector


【解决方案1】:

嗯,我想出了一个解决问题的办法。这是我如何让 Rector 工作的。

  1. 将我应用的 Cake 版本降级为 3.8.12(原为 3.9.0-RC2)
  2. 在 app\vendor\cakephp\plugin-installer\src\Installer\PluginInstaller.php:170 中手动修复了大括号弃用通知
  3. 为了修复Class Cake\Composer\Installer\PluginInstaller is not autoloadable, can not call post-autoload-dump script,我删除了我的app\vendor 文件夹,然后运行composer update,这似乎解决了这个问题。到这里为止还没有出现这个错误。
  4. 在此处备份运行良好的应用程序,并在 4.0 升级指南中开始升级步骤。
  5. 在 \upgrade 中,运行 composer install --no-dev,再次收到消息 Class Cake\Composer\Installer\PluginInstaller is not autoloadable, can not call post-autoload-dump script
  6. bin/cake upgrade file_rename locales <path/to/app>。没有问题。
  7. Ran bin/cake upgrade file_rename templates <path/to/app>。好的,没问题。
  8. 将我的 config/app.php 更改为 App=> paths => templates from 'templates' => [APP . 'Template' . DS], to 'templates' => [ROOT . DS . 'Template' . DS],(也做了语言环境)。
  9. 运行bin/cake upgrade rector --rules phpunit80 <path/to/app/tests>,现在得到了结果。它似乎完成了所有更新,并输出了一些错误,但我决定继续。
  10. 运行bin/cake upgrade rector --rules cakephp40 <path/to/app/src>,现在它似乎工作了。它显示更新的文件数量、大量进度条等。它开始输出在我的控制器中所做的更改(按字母顺序),但随后在前几个控制器之后挂起。但是,查看我的 src 文件夹,我可以看到所有控制器、模型等都已更新(上次修改日期是现在)。
  11. composer require --update-with-dependencies "phpunit/phpunit:^8.0"。完成并且看起来不错。
  12. 在这里运行composer require --update-with-dependencies "cakephp/cakephp:4.0. 很多依赖问题。我采取了一些替代步骤并更新了所有内容(实际上是从 here 复制了 composer.json)。这似乎解决了依赖问题,但升级后的应用程序仍然存在无数问题。

我不会在这里进一步讨论,因为上面的信息解决了原始问题,我还没有完成干净的升级。最终,我倾向于开始一个全新的、干净的应用程序安装并重建我的应用程序,复制和修复重构文件中的代码(如上面提到的 dype)。

无论如何,感谢您的回复。 祝你有个好的一天, D.

【讨论】:

    猜你喜欢
    • 2021-10-05
    • 2011-08-24
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多