Я использую 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.
Кто-нибудь может мне помочь найти решение? Любая помощь будет оценена