octobercms/october · error · ApplicationException
The combiner file ':name' is not found.
Error message
The combiner file ':name' is not found.
What it means
CombineAssets serves merged CSS/JS through the /combine route using a cache id that maps to the list of source files and their metadata. getContents($cacheKey) looks that id up via getCache(); on a miss (no stored record for the id) it throws ApplicationException naming the requested key. The URL itself is generated when a page renders, so a miss almost always means cached metadata was flushed or moved while some rendered output still references the old combined URL.
Source
Thrown at modules/system/classes/CombineAssets.php:224
$rewritePath = File::localToPublic(dirname($destination));
$combiner = $this->prepareCombiner($assets, $rewritePath, ['useCache' => false]);
$contents = $combiner->dump();
File::put($destination, $contents);
}
/**
* Returns the combined contents from a prepared cache identifier.
* @param string $cacheKey Cache identifier.
* @return string Combined file contents.
*/
public function getContents($cacheKey)
{
$cacheInfo = $this->getCache($cacheKey);
if (!$cacheInfo) {
throw new ApplicationException(__("The combiner file ':name' is not found.", ['name' => e($cacheKey)]));
}
// Ensure defaults
$cacheInfo += [
'version' => null,
'etag' => null,
'lastMod' => null,
'files' => null,
'path' => null,
'extension' => null,
'site' => null,
'theme' => null,
];
$this->setActiveSiteContext($cacheInfo['site'], $cacheInfo['theme']);
$this->setLocalPath($cacheInfo['path']);
// Analyze cache informationView on GitHub (pinned to b608633a7e)
Solutions
- Clear the CMS/page cache and reload the page so it re-renders with fresh combine URLs: php artisan cache:clear, then a hard refresh (the id is regenerated at render time).
- Purge any static page cache or CDN layer still serving HTML that contains the old /combine/<id> URL.
- Make sure every web node uses the same shared cache store (CACHE_DRIVER) so ids exist wherever the request lands.
- If it recurs, confirm the cache store is not being cleared by cron/deploy scripts while long-lived HTML references it.
Example fix
# before: deploy script clears cache but CDN keeps old HTML php artisan cache:clear # after: flush HTML caches that reference combined asset URLs too php artisan cache:clear && php artisan cms:cache:clear cdn-purge "/*"
Defensive patterns
Strategy: fallback
Validate before calling
// Before serving a page that embeds combined asset URLs, confirm the key still resolves
use System\Classes\CombineAssets;
function combinedAssetUrlExists(string $url): bool
{
$key = basename(parse_url($url, PHP_URL_PATH));
try {
CombineAssets::instance()->getContents($key);
return true;
} catch (\Throwable $e) {
return false;
}
} Try / catch
// In a custom route/error handler around /combine
use October\Rain\Exception\ApplicationException;
try {
return response(CombineAssets::instance()->getContents($cacheKey), 200, $headers);
} catch (ApplicationException $e) {
// Regenerate or fail with a cacheable 404 so CDNs stop retrying the stale URL
return response()->noContent()->setStatusCode(404, 'Combined asset expired');
} Prevention
- Flush page/CDN caches together with the application cache so HTML never outlives its combine ids.
- Keep CACHE_DRIVER identical on every web node sharing /combine traffic.
- Treat /combine/<id> as immutable-and-expiring: never hardcode combined URLs in templates.
When it happens
Trigger: Running php artisan cache:clear or the CMS combiner reset after pages were cached/CDN'd — old /combine/<id> URLs now 404 via this exception; switching CACHE_DRIVER (e.g. file to redis) so previously stored ids vanish; a load-balanced deployment where only one node shares the cache; a stale static-page cache or CDN edge still serving markup with the old asset URL.
Common situations: Right after deploys that clear caches; enabling/disabling plugins (bundle membership changes); mixed cache stores across environments; bots or browsers holding old HTML alive past a cache flush.
Related errors
- The {$this->manifestPath} directory must be present and writ
- getDependencies() must return an array: %s
- Vue component class not found: %s
- Vue component class must be a descendant of Backend\Classes\
- A widget class name ':name' has not been registered
AI-assisted analysis of octobercms/october@b608633a7e (2026-08-21).
Data as JSON: /api/errors/d216bd8ee3897031.
Report an issue: GitHub.