NameError неинициализированная константа MyWorker :: MyController - PullRequest
0 голосов
/ 09 июля 2020

Я использую sidekiq для выполнения простого примера worker. Когда я сделал запрос к моей конечной точке, он завершился успешно, но у рабочего я получил следующую ошибку:

*** NameError Exception: uninitialized constant SaveMessageWorker::Message

Я использую:

  • ruby 2.5. 7
  • rails 5.2.3
  • sidekiq 6.0.0

Это часть моей структуры проекта api rails:

app
---controllers
------api
---------v1
------------messages_controller.rb
---workers
------save_message_worker.rb
config
---initializers
------sidekiq.rb
---application.rb

Эти это мои файлы и пути:

app / worker / save_message_worker.rb

class SaveMessageWorker
  include Sidekiq::Worker

  def perform(message_list)
    # byebug
    # When I tried the below line, I got: *** NameError Exception: uninitialized constant SaveMessageWorker::Message
    message = Message.new(message: message_list)

  end
end

app / controllers / api / v1 / messages_controller.rb

    def multiple_concurrent_workers
        begin

            SaveMessageWorker.perform_async("Hello World!")
            return (render json: {status: "success", data:"processed successfully"})

        rescue => exception
            logger.error CONTROLLER_NAME + ': An error happened in method multiple_concurrent_workers: ' + exception.to_json
            return (render json: {status: "error", message: exception})
        end
    end

config / routes.rb

Rails.application.routes.draw do
  require 'sidekiq/web'
  mount Sidekiq::Web => '/sidekiq'
  
  devise_for :users 
    namespace :api, defaults: { format: "json" } do
      namespace :v1 do

          resources :messages do
            collection do
              post :multiple_concurrent_workers
            end
          end

      end
    end

end

config / initializers / sidekiq.rb

Sidekiq.configure_server do |config|
  config.redis = { url: 'redis://' + Rails.application.credentials[Rails.env.to_sym][:redis][:host].to_s + ':' +Rails.application.credentials[Rails.env.to_sym][:redis][:port].to_s + '/' + Rails.application.credentials[Rails.env.to_sym][:redis][:database].to_s }
end

Sidekiq.configure_client do |config|
  config.redis = { url: 'redis://' + Rails.application.credentials[Rails.env.to_sym][:redis][:host].to_s + ':' +Rails.application.credentials[Rails.env.to_sym][:redis][:port].to_s + '/' + Rails.application.credentials[Rails.env.to_sym][:redis][:database].to_s }
end

config / application.rb

require_relative 'boot'

require "rails"
require "active_model/railtie"
require "active_job/railtie"
require "active_record/railtie"
require "active_storage/engine"
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
require "action_cable/engine"
require "rails/test_unit/railtie"

Bundler.require(*Rails.groups)

module IbeenDev
  class Application < Rails::Application
    config.load_defaults 5.2
    
    config.middleware.use Rack::MethodOverride
    config.middleware.use ActionDispatch::Cookies
    config.middleware.use ActionDispatch::Session::CookieStore
    config.middleware.use ActionDispatch::Flash
    config.log_level = :error
    
    config.autoload_paths << Rails.root.join("lib")
    config.eager_load_paths << Rails.root.join("lib")

    config.api_only = true
    Koala.config.api_version = 'v2.0'

    config.active_job.queue_adapter = :sidekiq

  end
end

В проекте github был открытый выпуск, но автор сказал, что это не совсем проблема sidekiq.

Кто-нибудь может мне помочь найти решение? Любая помощь будет оценена

...