自动创建用于将 TYPO3 升级到下一个主要版本的 Composer 命令
Automate creation of Composer command for upgrading TYPO3 to next major version
目前正在使用 TYPO3 v9 Composer 将 TYPO3 站点升级到下一个主要版本 10.4。
我如何自动化该过程 - 而不是手动将 composer 命令放在一起,我必须在其中检查每个扩展并找出我需要升级到哪个版本,有没有办法自动执行此操作或协助创建composer require
命令与所有系统和第三方扩展?
例如结果我想执行这个(或等效的):
composer require typo3/cms-backend:10.4 typo3/cms-core:10.4 ...(all system extension) \
... helhum/typo3-console:^6.0.0 ... (3rdparty extensions with correct version constraint) \
--update-with-dependencies
自动更新是个好主意,因为它减少了后端 lock/content 冻结以重新启动所需的时间。
我最终重新启动的步骤是:
- 确保没有数据被更改:锁定后端,禁用任何会更改数据的前端表单。
- fetch/sync 实时数据进入您的本地测试系统
- 运行 更新脚本
- upload/sync 将数据更新到实时系统上的某个临时位置
- 暂时禁用实时网站
- 将实时系统上的数据移动到正确的 places/import 数据库中(您甚至可以通过使用不同的数据库和数据的符号链接来准备)
- 重新启用网站,解除后端锁定
为了让它工作,您只需要一个脚本,允许您根据需要在本地(或作为 CI 管道)重复更新过程,直到您对可重现的结果感到满意为止.
我知道周围有一些帮助程序 scripts/extensions 可以帮助实现这一点,但我更喜欢将它们放在一起作为 shell 脚本。在本地我将拥有最新的代码,我们现在准备的是一个将新代码与旧数据集成的脚本(“数据”我指的是 DB & /fileadmin,/uploads)。
所以这里只是一些提示:
- 如果您使用 ddev,在即将发布的 v1.17 中将有一个
ddev pull
命令可以方便地获取实时数据。到现在为止,我用这个 custom command for ddev.
vendor/bin/typo3 cleanup:
命名空间中的命令可以降低您处理不一致数据库的可能性
- 自定义升级向导非常适合您想使用 TYPO3 API 的任何地方。 - 你可以 运行 他们
vendor/bin/typo3cms upgrade:wizard
- typo3-console 使您可以轻松地原始 SQL 访问数据库(避免您为琐碎的数据库查询创建升级向导):例如
vendor/bin/typo3cms database:import <<< "UPDATE tt_content SET hidden=1 WHERE ..."
- DB 比较是
vendor/bin/typo3cms database:updateschema
您的问题:
do I perform the update of core and 3rdparty extensions in one scoop or is it safer to deactivate the (some?) 3rdparty extensions
如果安装了某些扩展,某些升级向导的行为可能会有所不同。对于依赖 TCA 的迁移尤其如此。所以我建议一步更新所有扩展。
Also, how do I automate the process (composer command)
按照我的方式,您只需 运行 该作曲家命令一次,然后您提交 composer.lock
。构建它可能有点麻烦,但我认为不需要自动化它。
写题的时候没有意识到,typo3-rector已经内置了答案。使用 rector,当您切换到下一个主要版本时,您可以在 composer.json 中自动更新扩展版本。
有关 typo3/rector 的最新说明,请参阅官方文档:
重要:当下一个版本的扩展不可用时,这不会给您警告(当您尝试 composer update
时会收到警告)。与往常一样,您应该使用版本控制系统,并且在准备好之前不要提交您的更改。在开发系统上工作,而不是在生产系统上工作。
您可以使用 rector/rector 来检查和修复您的 PHP 文件,而且,例如 composer.json.
例如,这样做是为了测试:
composer require typo3/cms-core:^10.4.0
composer require dmind/cookieman:^2.9.2
composer require georgringer/news
composer require rector/rector --dev
(我在这个例子中使用了这个扩展 cookieman,因为最新版本每个只支持一个 TYPO3 版本——尽管版本控制有点奇怪。我使用“news”,因为它目前不适用于 v11)。
用
创建一个rector.php
vendor/bin/rector init --template-type=typo3
为 TYPO3 10 添加/注释掉 composer.json
的检查:
rector.php:
$containerConfigurator->import(Typo3SetList::COMPOSER_PACKAGES_104_CORE);
$containerConfigurator->import(Typo3SetList::COMPOSER_PACKAGES_104_EXTENSIONS);
现在申请校长(仅限 composer.json):
vendor/bin/rector process --clear-cache composer.json
切换到 11:
rector.php:
$containerConfigurator->import(Typo3SetList::COMPOSER_PACKAGES_110_CORE);
$containerConfigurator->import(Typo3SetList::COMPOSER_PACKAGES_110_EXTENSIONS);
现在申请校长(再次composer.json
):
vendor/bin/rector process --clear-cache composer.json
不仅对 cms-core 的要求,而且对扩展的要求也应该已经改变。
现在继续 composer update
或当 composer.json
直接更改时您通常用来更新 composer.lock
的任何内容。
目前正在使用 TYPO3 v9 Composer 将 TYPO3 站点升级到下一个主要版本 10.4。
我如何自动化该过程 - 而不是手动将 composer 命令放在一起,我必须在其中检查每个扩展并找出我需要升级到哪个版本,有没有办法自动执行此操作或协助创建composer require
命令与所有系统和第三方扩展?
例如结果我想执行这个(或等效的):
composer require typo3/cms-backend:10.4 typo3/cms-core:10.4 ...(all system extension) \
... helhum/typo3-console:^6.0.0 ... (3rdparty extensions with correct version constraint) \
--update-with-dependencies
自动更新是个好主意,因为它减少了后端 lock/content 冻结以重新启动所需的时间。
我最终重新启动的步骤是:
- 确保没有数据被更改:锁定后端,禁用任何会更改数据的前端表单。
- fetch/sync 实时数据进入您的本地测试系统
- 运行 更新脚本
- upload/sync 将数据更新到实时系统上的某个临时位置
- 暂时禁用实时网站
- 将实时系统上的数据移动到正确的 places/import 数据库中(您甚至可以通过使用不同的数据库和数据的符号链接来准备)
- 重新启用网站,解除后端锁定
为了让它工作,您只需要一个脚本,允许您根据需要在本地(或作为 CI 管道)重复更新过程,直到您对可重现的结果感到满意为止.
我知道周围有一些帮助程序 scripts/extensions 可以帮助实现这一点,但我更喜欢将它们放在一起作为 shell 脚本。在本地我将拥有最新的代码,我们现在准备的是一个将新代码与旧数据集成的脚本(“数据”我指的是 DB & /fileadmin,/uploads)。
所以这里只是一些提示:
- 如果您使用 ddev,在即将发布的 v1.17 中将有一个
ddev pull
命令可以方便地获取实时数据。到现在为止,我用这个 custom command for ddev. vendor/bin/typo3 cleanup:
命名空间中的命令可以降低您处理不一致数据库的可能性- 自定义升级向导非常适合您想使用 TYPO3 API 的任何地方。 - 你可以 运行 他们
vendor/bin/typo3cms upgrade:wizard
- typo3-console 使您可以轻松地原始 SQL 访问数据库(避免您为琐碎的数据库查询创建升级向导):例如
vendor/bin/typo3cms database:import <<< "UPDATE tt_content SET hidden=1 WHERE ..."
- DB 比较是
vendor/bin/typo3cms database:updateschema
您的问题:
do I perform the update of core and 3rdparty extensions in one scoop or is it safer to deactivate the (some?) 3rdparty extensions
如果安装了某些扩展,某些升级向导的行为可能会有所不同。对于依赖 TCA 的迁移尤其如此。所以我建议一步更新所有扩展。
Also, how do I automate the process (composer command)
按照我的方式,您只需 运行 该作曲家命令一次,然后您提交 composer.lock
。构建它可能有点麻烦,但我认为不需要自动化它。
写题的时候没有意识到,typo3-rector已经内置了答案。使用 rector,当您切换到下一个主要版本时,您可以在 composer.json 中自动更新扩展版本。
有关 typo3/rector 的最新说明,请参阅官方文档:
重要:当下一个版本的扩展不可用时,这不会给您警告(当您尝试 composer update
时会收到警告)。与往常一样,您应该使用版本控制系统,并且在准备好之前不要提交您的更改。在开发系统上工作,而不是在生产系统上工作。
您可以使用 rector/rector 来检查和修复您的 PHP 文件,而且,例如 composer.json.
例如,这样做是为了测试:
composer require typo3/cms-core:^10.4.0
composer require dmind/cookieman:^2.9.2
composer require georgringer/news
composer require rector/rector --dev
(我在这个例子中使用了这个扩展 cookieman,因为最新版本每个只支持一个 TYPO3 版本——尽管版本控制有点奇怪。我使用“news”,因为它目前不适用于 v11)。
用
创建一个rector.php
vendor/bin/rector init --template-type=typo3
为 TYPO3 10 添加/注释掉 composer.json
的检查:
rector.php:
$containerConfigurator->import(Typo3SetList::COMPOSER_PACKAGES_104_CORE);
$containerConfigurator->import(Typo3SetList::COMPOSER_PACKAGES_104_EXTENSIONS);
现在申请校长(仅限 composer.json):
vendor/bin/rector process --clear-cache composer.json
切换到 11:
rector.php:
$containerConfigurator->import(Typo3SetList::COMPOSER_PACKAGES_110_CORE);
$containerConfigurator->import(Typo3SetList::COMPOSER_PACKAGES_110_EXTENSIONS);
现在申请校长(再次composer.json
):
vendor/bin/rector process --clear-cache composer.json
不仅对 cms-core 的要求,而且对扩展的要求也应该已经改变。
现在继续 composer update
或当 composer.json
直接更改时您通常用来更新 composer.lock
的任何内容。