Sidekiq 警告:未初始化的常量 ViewDBWorker Rails 4

Ari*_*rif 2 sidekiq ruby-on-rails-4

我正在使用 Rails 4.1.5 和 Sidekiq 3.3.0。我已将这个工人的重复设置设置为每一分钟后执行一次。它在本地运行良好,但在生产和登台环境中引发错误。尽管工作人员正在执行其工作并保存记录,但仅在一分钟后抛出错误。

2016-01-21T10:50:00.594Z 5173 TID-osv5dzz5o WARN: uninitialized constant ViewDBWorker
Run Code Online (Sandbox Code Playgroud)

应用程序/工人/view_db_worker.rb:

class ViewDBWorker
  include Sidekiq::Worker
  include Sidetiq::Schedulable

  recurrence { hourly.minute_of_hour((0..59).to_a) } if Rails.env.staging? || Rails.env.production?

  def perform
      begin        
        do_process()
      rescue => e
        puts "Error message: #{e.message}"      
      end
  end

  def do_process()
    puts 'The worker  !!'
  end
end
Run Code Online (Sandbox Code Playgroud)

应用程序.rb

config.eager_load_paths += %W(#{config.root}/app/workers)
Run Code Online (Sandbox Code Playgroud)

Has*_*ram 5

application.rb如果您在app/*rails 文件夹中定义了工作类,则不需要添加目录来加载路径。Rails 会自动加载这些文件。

如果你已经在其他地方定义了你的类,例如在lib/worker/*文件夹中,那么你需要将它添加到你的application.rb

config.autoload_paths += %W(#{config.root}/lib/workers)
config.eager_load_paths += %W(#{config.root}/lib/workers)
Run Code Online (Sandbox Code Playgroud)

除此之外,您的问题可能是运行 sidekiq 进程。你可以看到你的 sidekiq 进程(ps aux | grep sidekiq)并杀死它们。然后重启worker。

参考:https : //github.com/mperham/sidekiq/issues/1958

检查@pkoltermann 对这个问题的回答