使用 Surf 成功部署 TYPO3 项目后的操作码缓存

Opcode Cache after successful deployment of TYPO3 project using Surf

我正在使用(当前掌握的)Surf 部署 TYPO3 6.2 项目。 EXT:typo3_console (1.1.8) 和 EXT:coreapi (1.3.0) 都已安装(在最新的兼容版本中)并在 TYPO3 项目中激活。

不幸的是,在浏览器中请求成功部署的项目时出现错误:

Fatal error: Cannot redeclare class tx_pdfcreator2 in /var/www/vhosts/preview/htdocs/releases/20161122165450/Web/typo3conf/ext/pdf_creator2/class.tx_pdfcreator2.php on line 37

在 TYPO3 的安装工具中清除操作码缓存后,TYPO3 实例再次运行。

通过 EXT:coreapi 清除操作码缓存并没有解决问题,尽管控制台上的输出是 "The complete opcode cache has been cleared"。

这是 Surf 生成的输出:

Deploying preview (20161122165450)
Stage initialize
Webserver 001 (Project_001) TYPO3\Surf\Task\CreateDirectoriesTask
Webserver 001 (Project_001) TYPO3\Surf\Task\Generic\CreateDirectoriesTask
Stage package
Webserver 001 (Project_001) TYPO3\Surf\Task\Package\GitTask
Webserver 001 (Project_001) Foo\Deployment\Task\LocalInstallTask
Stage transfer
Webserver 001 (Project_001) TYPO3\Surf\Task\Transfer\RsyncTask
Webserver 001 (Project_001) TYPO3\Surf\Task\Generic\CreateSymlinksTask
Webserver 001 (Project_001) TYPO3\Surf\Task\TYPO3\CMS\CreatePackageStatesTask
Stage update
Webserver 001 (Project_001) TYPO3\Surf\Task\TYPO3\CMS\SymlinkDataTask
Webserver 001 (Project_001) TYPO3\Surf\Task\TYPO3\CMS\CopyConfigurationTask
Stage migrate
Webserver 001 (Project_001) TYPO3\Surf\Task\TYPO3\CMS\SetUpExtensionsTask
Webserver 001 (Project_001) TYPO3\Surf\Task\TYPO3\CMS\CompareDatabaseTask
Stage finalize
Stage test
Stage switch
Webserver 001 (Project_001) TYPO3\Surf\Task\SymlinkReleaseTask
Node "Webserver 001" is live!
Webserver 001 (Project_001) TYPO3\Surf\Task\TYPO3\CMS\FlushCachesTask
Stage cleanup
Webserver 001 (Project_001) TYPO3\Surf\Task\CleanupReleasesTask
Removing releases 20161117180245

知道这里出了什么问题以及我该如何解决这个问题吗?

使用 Surf 任务 \TYPO3\Surf\Task\Php\WebOpcacheResetCreateScriptTask\TYPO3\Surf\Task\Php\WebOpcacheResetExecuteTask(Surf 附带)而不是 EXT:coreapi 对我有用!

$workflow->addTask(WebOpcacheResetCreateScriptTask::class, 'package', $this);
$workflow->addTask(WebOpcacheResetExecuteTask::class, 'switch', $this);

要使用 surf 清除操作码缓存,您需要将 WebOpcacheResetCreateScriptTask 和 WebOpcacheResetExecuteTask 任务添加到您的工作流中。

使用 coreapi 清除 cli 上的操作码缓存不会执行任何操作。有关详细说明,请参阅 http://insight.helhum.io/post/142295674970/what-you-need-to-know-about-php-opcode-cache