0

我正在使用 sidekiq 做一个简单的示例工作者。当向我的端点发出请求时,它成功完成但在工作人员中我收到以下错误:

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

我在用着:

  • 红宝石 2.5.7
  • 导轨 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/workers/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

应用程序/控制器/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

配置/路由.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

配置/初始化程序/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

配置/应用程序.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项目中有一个open issue,但作者说这不完全是sidekiq问题。

谁能帮我找到解决方案?任何帮助将不胜感激

4

0 回答 0