instructure/canvas-lms · warning
Canvas Career permission group overrides failed: #
Error message
Canvas Career permission group overrides failed: #{e.message} What it means
A fallback warning in lib/permissions.rb when applying Canvas Career permission GROUP overrides raises an exception. The rescue logs e.message and returns base_groups, meaning career-specific permission group customizations are skipped and default group permissions are used.
Solutions
- Find the full backtrace in the Rails log around this warning (the message only contains e.message).
- Inspect the career permission group data for the affected account and repair/normalize the offending group records.
- Add nil-guards in the group override block for optional career group associations.
- Capture the exception with Canvas::Errors so regressions are tracked instead of only warned.
Example fix
// before
rescue => e
Rails.logger.warn("Canvas Career permission group overrides failed: #{e.message}")
// after
rescue => e
Rails.logger.warn("Canvas Career permission group overrides failed: #{e.message}")
Canvas::Errors.capture(e, tags: { area: "career_permissions" }) Defensive patterns
Strategy: try-catch
Validate before calling
groups = base_groups.select { |g| g.respond_to?(:group_info) && g.group_info.present? }
# only apply overrides for well-formed groups Type guard
def valid_career_group?(group)
group.present? && group.respond_to?(:group_info) &&
group.group_info.is_a?(Hash) && group.group_info[:permissions].present?
end Try / catch
begin
base_groups = apply_career_group_overrides(base_groups)
rescue NoMethodError, ActiveRecord::StatementInvalid => e
Rails.logger.warn("Canvas Career permission group overrides failed: #{e.class}: #{e.message}")
Canvas::Errors.capture(e)
base_groups # default group permissions
end Prevention
- Validate career permission group records (group_info shape) before override application
- Guard against nil/missing career groups on accounts
- Send rescued exceptions to Canvas::Errors for visibility
- Test group permission building against accounts without career groups enabled
When it happens
Trigger: Building permission groups for a Canvas Career context where the group-override iteration raises — e.g. a group_info record missing fields, an association load failure, or malformed group permission data during group_info transformation.
Common situations: Career environments with partially migrated permission group records; custom plugin code raising inside the group override path; nil group/role objects when an expected career group does not exist on the account.
Related errors
- Canvas Career permission overrides failed: #
- ActiveRecord::RecordNotFound
- Cannot change locked status on granular permission
- Cannot import to other courses
- Cannot modify outcome from another context
AI-assisted analysis of instructure/canvas-lms@1c9f0bb801 (2026-09-15).
Data as JSON: /api/errors/32fc696e8922b208.
Report an issue: GitHub.
Appendix: source
Thrown at lib/permissions.rb:136
if perm_def[:group] && (override = label_overrides[perm_key]) && override[:group_label]
group_key = perm_def[:group]
group_overrides[group_key] = override[:group_label]
end
end
if group_overrides.any?
return base_groups.transform_values do |group_info|
group_key = base_groups.key(group_info)
if group_overrides[group_key]
group_info.merge(label: group_overrides[group_key])
else
group_info
end
end
end
end
rescue => e
Rails.logger.warn("Canvas Career permission group overrides failed: #{e.message}")
end
end
base_groups
end
def self.group_info(group)
PERMISSION_GROUPS[group]
end
def self.group_label(group)
PERMISSION_GROUPS.dig(group, :label)&.call
end
end
View on GitHub (pinned to 1c9f0bb801)