首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动创建Composer命令,以便将TYPO3升级到下一个主要版本

自动创建Composer命令,以便将TYPO3升级到下一个主要版本
EN

Stack Overflow用户
提问于 2021-03-05 08:30:27
回答 2查看 218关注 0票数 0

目前正在使用TYPO3站点TYPO3 v9 Composer升级到下一个主要版本10.4。

我如何自动化这个过程--而不是手动地将composer命令放在一起,检查每个扩展并找出我需要升级到哪个版本,有什么方法可以自动完成这个任务,还是帮助创建带有所有系统和第三方扩展的composer require命令?

因此,我想执行以下操作(或类似的操作):

代码语言:javascript
复制
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 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-06 11:50:39

自动更新是个好主意,因为它降低了重新启动后端锁/内容冻结所需的时间。

对于最后重新启动,我的步骤是:

  • 确保没有数据被更改:锁定后端,禁用任何会更改数据的前端表单。
  • 将活数据获取/同步到本地测试系统
  • 运行更新脚本
  • 将更新后的数据上载/同步到实时系统的某个临时位置
  • 暂时停用网站
  • 将实时系统上的数据移动到正确的位置/导入DB (您甚至可以使用不同的数据库和数据的符号链接来准备)
  • 重新启用网站,删除后端锁

为了使其工作,您只需要一个脚本,它允许您在本地(或作为CI管道)经常重复更新过程,直到您对可重复的结果感到满意为止。

我知道这里有一些帮助脚本/扩展来促进这一点,但我更愿意把它放在一起作为shell脚本。在本地,我将有最新的代码,我们现在准备的是一个脚本,它将新代码与旧数据集成(我指DB & /fileadmin,/uploads)。

以下是一些提示:

  • 如果使用ddev,那么即将发布的v1.17中将有一个ddev pull命令,可以方便地获取实时数据。直到现在,我使用了这个ddev的自定义命令
  • vendor/bin/typo3 cleanup:命名空间中的命令可以降低处理不一致数据库的可能性。
  • 自定义升级向导非常适合您想要使用TYPO3 API的任何地方。-你可以用vendor/bin/typo3cms upgrade:wizard运行它们
  • Typo3-控制台为您提供了对数据库的简单原始SQL访问(避免为普通DB查询创建升级向导):例如,vendor/bin/typo3cms database:import <<< "UPDATE tt_content SET hidden=1 WHERE ..."
  • DB比较是vendor/bin/typo3cms database:updateschema

对于你的问题:

我是在一个独家执行核心和3 3rdparty扩展的更新,还是禁用(一些)3 3rdparty扩展更安全?

如果安装了某些扩展,某些升级向导的行为可能会有所不同。对于依赖TCA的迁移来说尤其如此。因此,我建议在一步内更新所有扩展。

另外,我如何自动化这个过程(composer命令)

按照我的方式,您必须只运行这个composer命令一次,然后提交composer.lock。构建它可能有点麻烦,但我不认为有必要将其自动化。

票数 2
EN

Stack Overflow用户

发布于 2021-09-17 08:05:13

当我写这个问题时,我没有意识到,打字已经有了一个内置的解决方案。使用rector,您可以在切换到下一个主要版本时,在composer.json中自动更新扩展版本。

有关最新的说明,请参见打印3/驱动程序的正式文档:

重要:当下一个版本的扩展不可用时,这不会给您一个警告(当您尝试composer update时,您将得到这个警告)。与往常一样,您应该使用版本控制系统,在准备就绪之前不要提交更改。致力于开发系统,而不是生产。

您可以使用rector/rector检查和修复PHP文件,但也可以使用composer.json。

例如,这样做是为了测试:

代码语言:javascript
复制
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

代码语言:javascript
复制
vendor/bin/rector init --template-type=typo3

添加/注释composer.json对TYPO3 10的检查:

rector.php:

代码语言:javascript
复制
$containerConfigurator->import(Typo3SetList::COMPOSER_PACKAGES_104_CORE);
$containerConfigurator->import(Typo3SetList::COMPOSER_PACKAGES_104_EXTENSIONS);

现在申请校长(仅适用于composer.json ):

代码语言:javascript
复制
vendor/bin/rector process  --clear-cache composer.json

切换到11:

rector.php:

代码语言:javascript
复制
$containerConfigurator->import(Typo3SetList::COMPOSER_PACKAGES_110_CORE);
$containerConfigurator->import(Typo3SetList::COMPOSER_PACKAGES_110_EXTENSIONS);

现在,请将该程序(再次应用于composer.json ):

代码语言:javascript
复制
vendor/bin/rector process  --clear-cache composer.json

不仅对cms核心的需求,而且对扩展的需求都应该已经改变了。

现在继续使用composer update或任何通常用于在直接更改composer.lock时更新composer.json的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66489167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档