Sidekiq不会执行工作

时间:2016-04-26 16:36:30

标签: ruby-on-rails ruby ruby-on-rails-4 sidekiq rails-activejob

这是我第一次使用sidekiq在Rails 4中执行预定的操作。我创建了一个perform方法来查找为空的hashtaggable_ids并将其从数据库中删除。当我尝试使用适用于Rails控制台的api运行作业时,我收到以下错误。

remove_hashtag_orphans.rb

from -e:1:in `load'
    from -e:1:in `<main>'>> RemoveHashtagOrphans.new.perform(hashtaggable_id)
NameError: undefined local variable or method `hashtaggable_id' for main:Object

作业文件的内容如下。

 class RemoveHashtagOrphans < ActiveJob::Base
      queue_as :default

      def perform(hashtaggable_id)
        #Needs argument 
        orphans = SimpleHashtag::Hashtag.all.select {|h| h.hashtaggables.size == 0}
        orphans.map(&:destroy)
      end
    end

    RemoveHashtagOrphans.new.perform(hashtaggable_id)

没有伙伴的原始方法就是这个。

def self.clean_orphans
  # Needs refactoring to call a single SQL query
  orphans = self.all.select { |h| h.hashtaggables.size == 0 }
  orphans.map(&:destroy)
end

1 个答案:

答案 0 :(得分:0)

RemoveHashtagOrphans.new.perform(hashtaggable_id)将在实例中实例化并执行作业。使用RemoveHashtagOrphans.perform_later(hashtaggable_id)将作业发送给Sidekiq。

您的代码失败,因为您有一个未定义的变量:

hashtaggable_id = 10
RemoveHashtagOrphans.new.perform(hashtaggable_id)
相关问题