首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sidekiq perform_async没有启动

Sidekiq perform_async没有启动
EN

Stack Overflow用户
提问于 2017-11-10 19:29:45
回答 1查看 1.1K关注 0票数 0

我正在使用Sidekiq创建Elasticsearch回调。我启动了Redis和Sidekiq,并在rails控制台中创建了一个对象,但似乎perform_sync没有启动。如果我将require 'sidekiq/testing';Sidekiq::Testing.inline!添加到sidekiq.rb中,它会像我预期的那样记录日志并引发错误。我是不是遗漏了什么?

Ruby 2.3.0

Rails 5.0.2

Sidekiq 4.2.9

Redis 3.2.0

sidekiq.rb

代码语言:javascript
复制
REDIS_URL  = 'localhost'
REDIS_PORT = '6379'
Sidekiq.configure_server do |config|
  config.redis = { url: "redis://#{REDIS_URL}:#{REDIS_PORT}" }
end

Sidekiq.configure_client do |config|
  config.redis = { url: "redis://#{REDIS_URL}:#{REDIS_PORT}" }
end

indexable.rb

代码语言:javascript
复制
module Indexable
  extend ActiveSupport::Concern

  included do
    def index_elasticsearch
      Rails.logger.debug 'call'          
      Rails.logger.debug Indexer::Logger
      Rails.logger.debug Indexer::Client
      Rails.logger.debug self.id.to_s
      Indexer.perform_async(:index, self.id.to_s) # nothing happens here
      Rails.logger.debug 'after'         
      self
    end
  end

  class Indexer
    include Sidekiq::Worker
    sidekiq_options queue: :elasticsearch, retry: false, backtrace: true

    Logger = Sidekiq.logger.level = Logger::DEBUG ? Sidekiq.logger : nil

    raise 'No config/elasticsearch.yml' unless File.exists? "config/elasticsearch.yml"
    erb    = ERB.new( File.read('config/elasticsearch.yml') ).result
    config = YAML.load(erb)[Rails.env].symbolize_keys
    config.merge! logger: Logger

    Client = Elasticsearch::Client.new(config)

    def perform(operation, record_id)
      Rails.logger.debug [ operation, "ID: #{record_id}"]
      raise
    end
  end
end

some_mongoid_class.rb

代码语言:javascript
复制
class SomeMongoidClass
  ...
  include ::Indexable
  ...
  after_save :index_elasticsearch
end

控制台

代码语言:javascript
复制
bundle exec sidekiq -e development --queue elasticsearch --verbose

...Booting Sidekiq 4.2.9 with redis options {:url=>"redis://localhost:6379"}...
2017-11-10T ... DEBUG: {:queues=>["elasticsearch"], :labels=>[], :concurrency=>25, :require=>".", :environment=>"development", :timeout=>8, ...

rails控制台

代码语言:javascript
复制
SomeMongoidClass.create(...)

before
#<Logger:0x...
#<Elasticsearch::Transport::Client:0x...
BSON::ObjectId('...')
after
EN

回答 1

Stack Overflow用户

发布于 2018-07-19 09:46:11

当我发布最后一条评论时,这个问题就解决了。

这只是一个愚蠢的错误。我没有把工人文件放到应用程序的工人文件夹中!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47221822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档