instructure/canvas-lms · warning · GoogleDrive::ConnectionException

No config check

Error message

No config check

What it means

GoogleDrive::Connection.config_check is the interface every external tool config must implement to validate settings; the Google Drive integration does not implement a real check and unconditionally raises ConnectionException. Note the source also has a latent bug: `ConnectionException("No config check")` calls the class as a method rather than `raise`, so the literal raise is what surfaces here. Callers should treat 'no config check' as unsupported, not as a broken config.

Solutions

  1. Do not treat this raise as a config failure — catch ConnectionException for this integration and consider the config valid/unchecked
  2. Avoid calling config_check for GoogleDrive; there is no supported validation
  3. Patch locally to `return true` if you need config_check to succeed

Example fix

// before
valid = GoogleDrive::Connection.config_check(settings)
// after
begin
  valid = GoogleDrive::Connection.config_check(settings)
rescue ConnectionException
  valid = true # google drive provides no config check
end
Defensive patterns

Strategy: try-catch

Try / catch

begin
  GoogleDrive::Connection.config_check(settings)
rescue ConnectionException
  # no-op: integration defines no config check
end

Prevention

When it happens

Trigger: Account/Canvas settings code invoking GoogleDrive::Connection.config_check(settings) to validate a Google Drive plugin configuration.

Common situations: Admin saving Google Drive plugin settings and Canvas running validation; generic tool-config validation loops that iterate all registered integrations.

Related errors


AI-assisted analysis of instructure/canvas-lms@1c9f0bb801 (2026-09-15). Data as JSON: /api/errors/6b6ab543e7bc6f91. Report an issue: GitHub.

Appendix: source

Thrown at gems/google_drive/lib/google_drive/connection.rb:107

          email_address: user_id,
          type: "user",
          role: "writer"
        )
        drive.create_permission(normalize_document_id(document_id), new_permission)
      rescue Google::Apis::Error => e
        raise ConnectionException, exception_message(e)
      end
    end

    def authorized?
      drive.get_about(fields: "user")
      true
    rescue ConnectionException, NoTokenError, Google::Apis::Error
      false
    end

    def self.config_check(_settings)
      raise ConnectionException("No config check")
    end

    def self.config=(config)
      unless config.is_a?(Proc)
        raise "Config must be a Proc"
      end

      @config = config
    end

    def self.config
      @config.call
    end

    private

    def exception_message(exception)
      return "Google Drive connection timed out" if exception.cause.is_a?(Faraday::TimeoutError)

View on GitHub (pinned to 1c9f0bb801)