【问题标题】:Sidekiq without Rails doesn't load worker classes没有 Rails 的 Sidekiq 不会加载工作类
【发布时间】:2014-07-31 23:37:54
【问题描述】:

我正在使用 Sidekiq 3.1.2 没有 Rails,如下所示:

$ sidekiq -vr sidekiq.rb

sidekiq.rb 看起来像这样:

($LOAD_PATH << '.' << 'lib' << 'lib/workers').uniq!
require 'lookup_worker'

lib/workers/lookup_worker.rb 看起来像这样:

require 'sidekiq'

class LookupWorker
  include Sidekiq::Worker

  def perform(*args)
    puts "LookupWorker#perform fired with arguments #{args.map(&:inspect).join(', ')}"
  end
end

但是当我在 irb 并尝试时

> LookupWorker.perform_async('asdf')

它给了我这个:

WARN: {"retry"=>true, "queue"=>"default", "class"=>"LookupWorker", "args"=>["asdf"], "jid"=>"8c278868c5f05ec9beb1dbae", "enqueued_at"=>1402457226.9612548}
WARN: uninitialized constant LookupWorker
WARN: [backtrace, none of it from my code]
ERROR: Sidekiq::Processor crashed!
NameError: uninitialized constant LookupWorker

我错过了什么?

【问题讨论】:

    标签: ruby sidekiq


    【解决方案1】:

    所以...

    LookupWorker 中,require 在第 1 行的 sidekiq gem 和 sidekiq 脚本之间感到困惑。

    我的sidekiq.rb 需要重命名为sidekiq_script.rb(或其他任何名称)。唯一的问题是,我必须在运行 sidekiq 时包含该目录:

    $ sidekiq -r ./sidekiq_script.rb
    

    不是

    $ sidekiq -r sidekiq_script.rb
    

    嗯,我觉得有点愚蠢。

    【讨论】:

    • 根据最近的一些经验,我认为这个问题也适用于ruby 命令行-require 选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    • 2023-03-28
    • 2017-05-20
    • 2014-10-25
    • 1970-01-01
    • 2015-01-03
    相关资源
    最近更新 更多