【问题标题】:Getting uninitialized constant from Sidekiq worker从 Sidekiq 工作人员获取未初始化的常量
【发布时间】:2016-09-02 22:42:21
【问题描述】:

我错过了一些东西,只是不确定是什么。 Sidekiq 启动并运行良好,我可以在终端中看到它。

我有这个工人,定义在app/workers/sqs_worker.rb

class SqsWorker
  include Sidekiq::Worker
  require 'aws-sdk'

  def perform
    #do something
  end
end

然后在app/test.rb 的测试文件中,我有非常简单的代码:

require 'sidekiq'

SqsWorker.new.perform_async

当我运行 test.rb 文件时,我收到此错误:uninitialized constant SqsWorker (NameError)

我在哪里误入歧途?我正在运行 Sidekiq (4.1.4)

我尝试杀死正在运行的进程并重新启动 Sidekiq 和 Redis,但没有成功。

【问题讨论】:

  • 你的 sidekiq 版本是什么(sidekiq -V)?
  • Sidekiq (4.1.4) 并更新原帖..
  • 您可以尝试将其添加到您的application.rbconfig.autoload_paths += %W(#{config.root}/app/workers)
  • 是的,之前尝试过.. 没用.. 呃.. 实际上有这两条线:config.autoload_paths += %W(#{config.root}/lib)config.eager_load_paths += %W(#{config.root}/lib) 并且没有骰子.. 射击

标签: ruby-on-rails ruby sidekiq


【解决方案1】:

uninitialized constant SqsWorker (NameError) 表示您在test.rb 中的脚本无法定位类SqsWorker

您需要做的就是将require 'sidekiq' 替换为require_relative 'workers/sqs_worker',以使您的脚本知道SqsWorker 类的位置。

【讨论】:

  • 这是有道理的,但修复没有奏效。仍然得到同样的错误..
【解决方案2】:

可能,您从应用程序范围之外运行了 test.rb,如下所示:

ruby app/test.rb

但为此,您需要在测试中添加如下内容:

require 'rubygems'
require 'bundler/setup'

require File.expand_path('../config/environment',  __FILE__)

SqsWorker.new.perform_async

然后这样运行:

bundle exec ruby app/test.rb

为什么需要这个?因为现在,bundler 管理你添加到应用程序中的依赖项,因此,你也需要加载 rails 环境,最后一个将加载 app/ 下的所有内容。

【讨论】:

  • 嗯,这是我第一次使用 Sidekiq,我只是在测试它是否对我有用.. 但我只是继续将它放入控制器中,现在它可以工作了好的..感谢您为我指明正确的方向!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多