从Sidekiq工作者获得未初始化的持续性

时间:2016-09-02 13:20:14

标签: ruby-on-rails ruby sidekiq

我错过了什么,只是不确定是什么。 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,但没有运气。

2 个答案:

答案 0 :(得分:0)

uninitialized constant SqsWorker (NameError)表示test.rb中的脚本无法找到课程SqsWorker

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

答案 1 :(得分:0)

可能是你从应用程序范围之外运行了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

你为什么需要这个?因为现在,捆绑器管理添加到您的应用程序的依赖项,因此,您还需要加载rails环境,而最后一个将基本上加载app/下的所有内容。