diff --git a/recipe/magento2.php b/recipe/magento2.php index 44b4a4615..5a04724cc 100644 --- a/recipe/magento2.php +++ b/recipe/magento2.php @@ -478,39 +478,51 @@ function magentoDeployAssetsSplit(string $area) **/ desc('Update cache id_prefix'); task('magento:set_cache_prefix', function () { - //download current env config - $tmpConfigFile = tempnam(sys_get_temp_dir(), 'deployer_config'); - download('{{deploy_path}}/shared/' . ENV_CONFIG_FILE_PATH, $tmpConfigFile); - $envConfigArray = include($tmpConfigFile); - //set prefix to `alias_releasename_` - $prefixUpdate = get('alias') . '_' . get('release_name') . '_'; - - //check for preload keys and update - if (isset($envConfigArray['cache']['frontend']['default']['backend_options']['preload_keys'])) { - $oldPrefix = $envConfigArray['cache']['frontend']['default']['id_prefix']; - $preloadKeys = $envConfigArray['cache']['frontend']['default']['backend_options']['preload_keys']; - $newPreloadKeys = []; - foreach ($preloadKeys as $preloadKey) { - $newPreloadKeys[] = preg_replace('/^' . $oldPrefix . '/', $prefixUpdate, $preloadKey); + $envConfigFile = "{{deploy_path}}/shared" . '/' . ENV_CONFIG_FILE_PATH; + $tmpEnvConfigFile = "{{deploy_path}}/shared" . '/' . TMP_ENV_CONFIG_FILE_PATH; + $newPrefix = get('alias') . '_' . get('release_name') . '_'; + + $phpCode = <<<'PHP' + $envConfigFile = $argv[1]; + $tmpEnvConfigFile = $argv[2]; + $newPrefix = $argv[3]; + $config = include $envConfigFile; + + $defaultCache = &$config['cache']['frontend']['default']; + $pageCache = &$config['cache']['frontend']['page_cache']; + + $oldPrefix = $defaultCache['id_prefix'] ?? ''; + + // Update preload_keys if they exist to match the new prefix + if (isset($defaultCache['backend_options']['preload_keys'])) { + foreach ($defaultCache['backend_options']['preload_keys'] as &$key) { + if ($oldPrefix !== '' && str_starts_with($key, $oldPrefix)) { + $key = $newPrefix . substr($key, strlen($oldPrefix)); + } + } } - $envConfigArray['cache']['frontend']['default']['backend_options']['preload_keys'] = $newPreloadKeys; - } - //update id_prefix to include release name - $envConfigArray['cache']['frontend']['default']['id_prefix'] = $prefixUpdate; - $envConfigArray['cache']['frontend']['page_cache']['id_prefix'] = $prefixUpdate; - - //Generate configuration array as string - $envConfigStr = '