php - 将 cms 命令行更新到 3.5.12.1 或更高版本失败
问题描述
我正在运行以下命令来更新工艺 cms:
php craft update craft
但是,升级到 3.5.12.1 或更高版本失败并出现以下错误:
Performing update with Composer ... done
Applying new migrations ... error: The command "'/var/www/craft' 'migrate/all' '--no-content'" failed.
Exit Code: 1(General error)
Working directory: /var/www
Output:
================
Error Output:
================
Error: array_merge(): Expected parameter 2 to be an array, null given
Output:
我正在运行的当前版本的工艺是 3.3.19,它在 docker 中运行,使用以下 composer.json:
. . .
"require": {
"aelvan/craft-cp-element-count": "^v1.0.1",
"aelvan/imager": "v2.3.0",
"aelvan/inlin": "^2.1",
"aelvan/preparse-field": "v1.1.0",
"am-impact/amcommand": "^3.1.4",
"angellco/portal": "1.1.3",
"angellco/spoon": "3.3.7",
"charliedev/element-map": "^1.2",
"charliedev/section-field": "^1.1.0",
"craftcms/aws-s3": "1.2.5",
"craftcms/cms": "3.3.19",
"craftcms/feed-me": "4.1.2",
"craftcms/redactor": "2.4.0",
"doublesecretagency/craft-inventory": "2.0.3",
"doublesecretagency/craft-siteswitcher": "2.1.0",
"ether/logs": "^3.0.3",
"ether/sidebarentrytypes": "^1.0",
"fruitstudios/linkit": "1.1.11",
"hashtagerrors/user-initials-photo": "1.1.1",
"lukeyouell/craft-queue-manager": "^1.1.0",
"marionnewlevant/snitch": "3.0.0",
"misterbk/mix": "^1.5",
"mmikkel/child-me": "1.0.6",
"mmikkel/cp-field-inspect": "1.0.7",
"mmikkel/incognito-field": "1.1.1.1",
"monachilada/craft-matrixtoolbar": "^1.0.6",
"nfourtythree/entriessubset": "1.2.2",
"nystudio107/craft-cookies": "^1.1",
"nystudio107/craft-emptycoalesce": "1.0.6",
"nystudio107/craft-imageoptimize": "1.6.4",
"nystudio107/craft-minify": "^1.2.9",
"nystudio107/craft-retour": "3.1.27",
"nystudio107/craft-scripts": "^1.2.4",
"nystudio107/craft-seomatic": "3.2.32",
"nystudio107/craft-typogrify": "1.1.18",
"nystudio107/craft-webperf": "1.0.14",
"ostark/craft-async-queue": "2.0.0",
"page-8/craft-manytomany": "1.0.2.2",
"putyourlightson/craft-blitz": "2.3.4",
"rias/craft-position-fieldtype": "^1.0.13",
"rias/craft-width-fieldtype": "^1.0",
"spicyweb/craft-embedded-assets": "2.1.1.1",
"spicyweb/craft-fieldlabels": "1.1.7",
"spicyweb/craft-neo": "2.5.7",
"superbig/craft-entry-instructions": "1.0.6",
"topshelfcraft/environment-label": "^3.1.5",
"verbb/cp-nav": "^2.0.9",
"verbb/default-dashboard": "^1.0",
"verbb/expanded-singles": "^1.0.4",
"verbb/field-manager": "2.1.0",
"verbb/icon-picker": "1.0.10",
"verbb/image-resizer": "2.0.6",
"verbb/super-table": "2.3.0",
"vlucas/phpdotenv": "^2.4.0",
"wbrowar/craft-communicator": "^1.0",
"wbrowar/guide": "2.1.2",
"yiisoft/yii2-redis": "^2.0"
},
"repositories": {
"element-map": {
"type": "path",
"url": "./plugins/element-map"
}
},
"autoload": {
"psr-4": {
"modules\\utilitiesmodule\\": "modules/utilitiesmodule/src/",
"putyourlightson\\blitz\\drivers\\storage\\": "plugins/blitz-override"
}
},
"config": {
"optimize-autoloader": true,
"config": {
"process-timeout": 0
},
"platform": {
"php": "7.2.5"
},
"sort-packages": true
},
"scripts": {
"post-update-cmd": [
"./craft migrate/all",
"./craft clear-caches/all"
],
"post-install-cmd": [
"./craft migrate/all",
"./craft clear-caches/all"
]
}
}
我试过禁用插件,但这似乎没有什么区别。另外,我不确定“'/var/www/craft' 'migrate/all' '--no-content'” 命令来自哪里,因为这似乎与作曲家中的命令略有不同。 json。
当我尝试仅运行迁移时:
./craft migrate/all
我得到以下堆栈跟踪:
PHP Warning 'yii\base\ErrorException' with message 'array_merge(): Expected parameter 2 to be an array, null given'
in /var/www/vendor/yiisoft/yii2/web/UrlManager.php:222
Stack trace:
#0 [internal function]: yii\base\ErrorHandler->handleError()
#1 /var/www/vendor/yiisoft/yii2/web/UrlManager.php(222): array_merge()
#2 /var/www/vendor/yiisoft/yii2-debug/src/Module.php(290): yii\web\UrlManager->addRules()
#3 /var/www/vendor/yiisoft/yii2/base/Application.php(333): yii\debug\Module->bootstrap()
#4 /var/www/vendor/craftcms/cms/src/console/Application.php(61): yii\base\Application->bootstrap()
#5 /var/www/vendor/yiisoft/yii2/base/Application.php(279): craft\console\Application->bootstrap()
#6 /var/www/vendor/yiisoft/yii2/console/Application.php(125): yii\base\Application->init()
#7 /var/www/vendor/craftcms/cms/src/console/Application.php(47): yii\console\Application->init()
#8 /var/www/vendor/yiisoft/yii2/base/BaseObject.php(109): craft\console\Application->init()
#9 /var/www/vendor/yiisoft/yii2/base/Application.php(212): yii\base\BaseObject->__construct()
#10 /var/www/vendor/yiisoft/yii2/console/Application.php(90): yii\base\Application->__construct()
#11 [internal function]: yii\console\Application->__construct()
#12 /var/www/vendor/yiisoft/yii2/di/Container.php(420): ReflectionClass->newInstanceArgs()
#13 /var/www/vendor/yiisoft/yii2/di/Container.php(171): yii\di\Container->build()
#14 /var/www/vendor/yiisoft/yii2/BaseYii.php(365): yii\di\Container->get()
#15 /var/www/vendor/craftcms/cms/bootstrap/bootstrap.php(246): yii\BaseYii::createObject()
#16 /var/www/vendor/craftcms/cms/bootstrap/console.php(51): require('/var/www/vendor...')
#17 /var/www/craft(21): require('/var/www/vendor...')
#18 {main}
这似乎是与 UrlManager 代码相关的工艺错误,但如果是这种情况,我不知道为什么其他人似乎没有体验过它(我在搜索中找不到任何关于它的信息)?有人对可能出现的问题有任何建议吗?
解决方案
所以我能够弄清楚这个问题。我继承了这个项目,并且有人添加'bootstrap' => ['debug']
了 config/php.app 文件,以启用 Yii 调试工具栏。这个调试模块在 UrlManager 对象上调用 addRules(),并且工艺代码已经将该对象的 rules 字段设置为 null 而不是 []。当调用 addRules() 时,array_merge() 对 null 值抛出异常(因为它期望 [ ] 代替)。通过删除调试模块可以完全避免此代码路径。
TLDR;如果在更新到 Craft 3.5.12.1 或更高版本时在 UrlManager.php 中出现 array_merge() 异常,请从 config/php.app 中删除“调试”模块。
推荐阅读
- c++ - 检查两个索引之间的回文
- curl - 如何使用`curl`在`--data-binary`的文本中间插入文件的内容?
- mysql - 尝试在实例的索引中运行随机数,但我得到索引超出范围错误
- image - React native:推荐使用 PNG 或 SVG 图像吗?
- openmdao - assemble_jac=True 的 compute_totals 需要更长的时间
- email-spam - 网络钓鱼电子邮件正在学习我发送的内容?
- c# - 从对象列表中提取特定对象属性到列表中
- javascript - CORS 策略已阻止从源访问 XMLHttpRequest:请求的资源上不存在“Access-Control-Allow-Origin”标头
- python - 如何在列中找到稳健的 sigma 值,然后找到上限和下限?
- javascript - 使用javascript的Android webview视频静音不起作用