2016-09-02 3 views
0

Мне что-то не хватает, просто не знаю, что. 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, чтобы не повезло.

+0

какая у вас сторонаkiq версия ('sidekiq -V')? – dp7

+0

Sidekiq (4.1.4) и обновить исходное сообщение .. – ToddT

+0

Можете ли вы попробовать добавить это в свой 'application.rb':' config.autoload_paths + =% W (# {config.root}/app/workers) ' – dp7

ответ

0

uninitialized constant SqsWorker (NameError) указывает, что ваш сценарий в test.rb не может найти класс SqsWorker

Все, что вам нужно сделать, это заменить require 'sidekiq' с require_relative 'workers/sqs_worker', чтобы сделать ваш сценарий известно о местонахождении SqsWorker класса.

+0

Это имеет смысл, но исправление не работает. Все еще получаю ту же самую ошибку. – ToddT

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 

Зачем вам это нужно? Поскольку в настоящее время поставщик связывает ваши зависимости, добавленные в ваше приложение, и поэтому вам необходимо загрузить среду рельсов, а последняя будет загружать все вещи под app/ в основном.

+0

Ну, это первый раз, когда я использую Sidekiq, и я просто тестировал, будет ли это работать для меня. Но я просто пошел и поставил его в контроллер, и теперь его работа отлично .. спасибо, что указал мне в правильном направлении! – ToddT

Смежные вопросы