instructure/canvas-lms · error
Fingerprint not found. #
Error message
Fingerprint not found. #{bundle_path} #{variant} What it means
cache_for looks up a css fingerprint for a (bundle_path, variant) pair in the combined_checksums manifest keyed by '<bundle>.scss<separator>variant'. If the key is absent — the bundle isn't in the built manifest for that variant — it raises 'Fingerprint not found'. Callers like all_fingerprints_for will propagate this.
Solutions
- Run yarn run build:css so the new/renamed bundle is included in the checksums manifest
- Correct the bundle_path string in the calling code to match the actual scss file path (key is built as "#{bundle_path}.scss")
- Confirm the plugin/account css bundle is part of the build globs
- Check the variant name matches an actual variant in CONFIG['variants']
Example fix
// before
BrandableCSS.cache_for("bundles/speedgradeer", "new_styles_normal") # typo
// after
BrandableCSS.cache_for("bundles/speedgrader", "new_styles_normal") Defensive patterns
Strategy: fallback
Validate before calling
key = "#{bundle_path}.scss"
raise 'unknown bundle' unless BrandableCSS.combined_checksums.key?([key, variant].join(sep)) Try / catch
begin
BrandableCSS.cache_for(bundle_path, variant)
rescue RuntimeError => e
raise unless e.message.start_with?('Fingerprint not found')
Rails.logger.warn("unknown css bundle #{bundle_path}")
nil
end Prevention
- Reference bundle paths from constants, not hand-typed strings
- Rebuild css whenever adding or renaming scss files
- List variants from CONFIG['variants'] instead of hardcoding
When it happens
Trigger: brandable_css.cache_for('bundles/speedgrader', 'new_styles_normal') where the scss file isn't listed in the bundles_with_deps manifest for that variant (typo'd bundle path, plugin bundle not built, new bundle added without rebuilding).
Common situations: Adding a new .scss bundle and serving without rebuilding css; renaming an scss file while old code still references the old path; plugin css not compiled in the deploy.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- # does not exist. You need to run `yarn run build:css`…
- you must run "webpack" first
- A new_id, '# ', referenced an existing # and the # with #…
- A new_integration_id, '#
- A student referenced a non-existent user #
AI-assisted analysis of instructure/canvas-lms@1c9f0bb801 (2026-09-15).
Data as JSON: /api/errors/591ec43871e92d75.
Report an issue: GitHub.
Appendix: source
Thrown at lib/brandable_css.rb:317
# template is rendered at runtime
def handlebars_index_json
if defined?(ActionController) && ActionController::Base.perform_caching && defined?(@handlebars_index_json)
return @handlebars_index_json
end
file = APP_ROOT.join(CONFIG.dig("indices", "handlebars", "path"))
unless file.exist?
raise "#{file.expand_path} does not exist. You need to run `yarn run build:css` before you can serve css."
end
@handlebars_index_json = file.read.rstrip
end
# bundle path should be something like "bundles/speedgrader" or "plugins/analytics/something"
def cache_for(bundle_path, variant)
key = ["#{bundle_path}.scss", variant].join(CONFIG["manifest_key_seperator"])
fingerprint = combined_checksums[key]
raise "Fingerprint not found. #{bundle_path} #{variant}" unless fingerprint
fingerprint
end
def all_fingerprints_for(bundle_path)
variants.index_with do |variant|
cache_for(bundle_path, variant)
end
end
end
end
View on GitHub (pinned to 1c9f0bb801)