简体   繁体   中英

Uninitialised Constant Doorkeeper::AccessToken in Doorkeeper Rake Task

I've implemented OAuth 2 with Doorkeeper Gem in a rails project(Grape API). I want to delete the expired and revoked access_token by a rake task. So far, I've been following the official doorkeeper documentation and stumble upon rake task . According to it, I added Doorkeeper::Rake.load_tasks in my Rakefile . After that when I run rake doorkeeper:db:cleanup in console, I get the following error.

rake aborted!
NameError: uninitialized constant Doorkeeper::AccessToken
/.rvm/gems/ruby-2.6.0p0/ruby/2.6.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/active_support.rb:74:in `block in load_missing_constant'
/.rvm/gems/ruby-2.6.0p0/ruby/2.6.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/active_support.rb:8:in `without_bootsnap_cache'
/.rvm/gems/ruby-2.6.0p0/ruby/2.6.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/active_support.rb:74:in `rescue in load_missing_constant'
/.rvm/gems/ruby-2.6.0p0/ruby/2.6.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/active_support.rb:56:in `load_missing_constant'
/.rvm/gems/ruby-2.6.0p0/ruby/2.6.0/gems/doorkeeper-5.0.2/lib/doorkeeper/rake/db.rake:16:in `block (4 levels) in <main>'

My Rakefile.rb

require_relative 'config/application'
Doorkeeper::Rake.load_tasks
Rails.application.load_tasks

I've also read Cleanup AccessGrant and AccessToken and Add a rake task to cleanup stale database records but none of this solves my issue. How can I solve this?

Update /.rvm/gems/ruby-2.6.0p0/ruby/2.6.0/gems/doorkeeper-5.0.2/lib/doorkeeper.rb file

require 'doorkeeper/version'
require 'doorkeeper/engine'
require 'doorkeeper/config'

require 'doorkeeper/request/strategy'
require 'doorkeeper/request/authorization_code'
require 'doorkeeper/request/client_credentials'
require 'doorkeeper/request/code'
require 'doorkeeper/request/password'
require 'doorkeeper/request/refresh_token'
require 'doorkeeper/request/token'

require 'doorkeeper/errors'
require 'doorkeeper/server'
require 'doorkeeper/request'
require 'doorkeeper/validations'

require 'doorkeeper/oauth/authorization/code'
require 'doorkeeper/oauth/authorization/context'
require 'doorkeeper/oauth/authorization/token'
require 'doorkeeper/oauth/authorization/uri_builder'
require 'doorkeeper/oauth/helpers/scope_checker'
require 'doorkeeper/oauth/helpers/uri_checker'
require 'doorkeeper/oauth/helpers/unique_token'

require 'doorkeeper/oauth'
require 'doorkeeper/oauth/scopes'
require 'doorkeeper/oauth/error'
require 'doorkeeper/oauth/base_response'
require 'doorkeeper/oauth/code_response'
require 'doorkeeper/oauth/token_response'
require 'doorkeeper/oauth/error_response'
require 'doorkeeper/oauth/pre_authorization'
require 'doorkeeper/oauth/base_request'
require 'doorkeeper/oauth/authorization_code_request'
require 'doorkeeper/oauth/refresh_token_request'
require 'doorkeeper/oauth/password_access_token_request'

require 'doorkeeper/oauth/client_credentials/validation'
require 'doorkeeper/oauth/client_credentials/creator'
require 'doorkeeper/oauth/client_credentials/issuer'
require 'doorkeeper/oauth/client_credentials/validation'
require 'doorkeeper/oauth/client/credentials'

require 'doorkeeper/oauth/client_credentials_request'
require 'doorkeeper/oauth/code_request'
require 'doorkeeper/oauth/token_request'
require 'doorkeeper/oauth/client'
require 'doorkeeper/oauth/token'
require 'doorkeeper/oauth/token_introspection'
require 'doorkeeper/oauth/invalid_token_response'
require 'doorkeeper/oauth/forbidden_token_response'

require 'doorkeeper/models/concerns/orderable'
require 'doorkeeper/models/concerns/scopes'
require 'doorkeeper/models/concerns/expirable'
require 'doorkeeper/models/concerns/revocable'
require 'doorkeeper/models/concerns/accessible'

require 'doorkeeper/models/access_grant_mixin'
require 'doorkeeper/models/access_token_mixin'
require 'doorkeeper/models/application_mixin'

require 'doorkeeper/helpers/controller'

require 'doorkeeper/rails/routes'
require 'doorkeeper/rails/helpers'

require 'doorkeeper/rake'
require 'doorkeeper/stale_records_cleaner'

require 'doorkeeper/orm/active_record'

module Doorkeeper
  def self.authenticate(request, methods = Doorkeeper.configuration.access_token_methods)
    OAuth::Token.authenticate(request, *methods)
  end
end

Did you try to load application env first for your rake task?

Doorkeeper models uses lazy-loading with ActiveSupport hooks ( on_load(:active_record ), so if you don't load your app env or AR it can skip models initialization and that's why Rake task misses required classes.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM