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

  1. Find the full backtrace in the Rails log around this warning (the message only contains e.message).
  2. Inspect the career permission group data for the affected account and repair/normalize the offending group records.
  3. Add nil-guards in the group override block for optional career group associations.
  4. 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

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


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)