【问题标题】:Sidekiq fails to start when have I have admin model当我有管理员模型时,Sidekiq 无法启动
【发布时间】:2014-08-27 12:12:44
【问题描述】:

我正在使用 sidekiq 处理后台作业,这不是我第一次使用 sidekiq。

问题:

如果我有一个名为 admin 的设计模型,Sidekiq 将无法启动。

class Admin < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :registerable, :timeoutable and :omniauthable
  devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable
end

如果我评论这个“管理员”模型类,那么 sidekiq 将按预期正常启动。目前我使用的是 sidekiq 默认配置。

错误回溯:

bundle exec sidekiq
Admin is not a class
/home/ninja/workspace/howismyschool/app/models/admin.rb:1:in `<top (required)>'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/activesupport-4.1.4/lib/active_support/dependencies.rb:443:in `load'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/activesupport-4.1.4/lib/active_support/dependencies.rb:443:in `block in load_file'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/activesupport-4.1.4/lib/active_support/dependencies.rb:633:in `new_constants_in'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/activesupport-4.1.4/lib/active_support/dependencies.rb:442:in `load_file'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/activesupport-4.1.4/lib/active_support/dependencies.rb:342:in `require_or_load'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/activesupport-4.1.4/lib/active_support/dependencies.rb:307:in `depend_on'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/activesupport-4.1.4/lib/active_support/dependencies.rb:225:in `require_dependency'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/railties-4.1.4/lib/rails/engine.rb:468:in `block (2 levels) in eager_load!'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/railties-4.1.4/lib/rails/engine.rb:467:in `each'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/railties-4.1.4/lib/rails/engine.rb:467:in `block in eager_load!'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/railties-4.1.4/lib/rails/engine.rb:465:in `each'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/railties-4.1.4/lib/rails/engine.rb:465:in `eager_load!'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/railties-4.1.4/lib/rails/engine.rb:346:in `eager_load!'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/railties-4.1.4/lib/rails/application/finisher.rb:58:in `each'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/railties-4.1.4/lib/rails/application/finisher.rb:58:in `block in <module:Finisher>'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/railties-4.1.4/lib/rails/initializable.rb:30:in `instance_exec'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/railties-4.1.4/lib/rails/initializable.rb:30:in `run'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/railties-4.1.4/lib/rails/initializable.rb:55:in `block in run_initializers'
/home/ninja/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:226:in `block in tsort_each'
/home/ninja/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:348:in `block (2 levels) in each_strongly_connected_component'
/home/ninja/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:427:in `each_strongly_connected_component_from'
/home/ninja/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:347:in `block in each_strongly_connected_component'
/home/ninja/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:345:in `each'
/home/ninja/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:345:in `call'
/home/ninja/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:345:in `each_strongly_connected_component'
/home/ninja/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:224:in `tsort_each'
/home/ninja/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:205:in `tsort_each'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/railties-4.1.4/lib/rails/initializable.rb:54:in `run_initializers'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/railties-4.1.4/lib/rails/application.rb:300:in `initialize!'
/home/ninja/workspace/howismyschool/config/environment.rb:5:in `<top (required)>'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/activesupport-4.1.4/lib/active_support/dependencies.rb:247:in `require'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/activesupport-4.1.4/lib/active_support/dependencies.rb:247:in `block in require'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/activesupport-4.1.4/lib/active_support/dependencies.rb:232:in `load_dependency'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/activesupport-4.1.4/lib/active_support/dependencies.rb:247:in `require'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/sidekiq-3.2.0/lib/sidekiq/cli.rb:230:in `boot_system'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/sidekiq-3.2.0/lib/sidekiq/cli.rb:49:in `run'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/gems/sidekiq-3.2.0/bin/sidekiq:8:in `<top (required)>'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/bin/sidekiq:23:in `load'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/bin/sidekiq:23:in `<main>'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/bin/ruby_executable_hooks:15:in `eval'
/home/ninja/.rvm/gems/ruby-2.1.2@howismyschoolisdoing/bin/ruby_executable_hooks:15:in `<main>'

应用环境:

  • 红宝石 2.1.2
  • 导轨 4.1.4
  • Ubuntu 14.04

【问题讨论】:

    标签: ruby ruby-on-rails-4 devise backgroundworker sidekiq


    【解决方案1】:

    该错误与 sidekiq 无关。 is not a class 异常很可能是由命名冲突引起的(您在某处定义了常量 Admin)。检查您的项目是否有 Admin 常量并重命名它。

    如何在控制台(irb)中重现错误:

    1.9.3-p448 :001 > A = 1
     => 1
    1.9.3-p448 :002 > class A
    1.9.3-p448 :003?> end
    TypeError: A is not a class
    

    【讨论】:

    • 是的,这可能是个问题。我在我的应用程序中安装了 activeadmin,这似乎是原因。当我从应用程序中完全评论 activeadmin 时,sidekiq 正常启动。我正在查看 activeadmin gem 以查找此 Admin 常量的定义位置,但找不到。所以问题在于这个管理员名称冲突,但在哪里找不到。现在我要重命名我的管理类。
    猜你喜欢
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    相关资源
    最近更新 更多