这是我第一次使用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
答案 0 :(得分:0)
RemoveHashtagOrphans.new.perform(hashtaggable_id)
将在实例中实例化并执行作业。使用RemoveHashtagOrphans.perform_later(hashtaggable_id)
将作业发送给Sidekiq。
您的代码失败,因为您有一个未定义的变量:
hashtaggable_id = 10
RemoveHashtagOrphans.new.perform(hashtaggable_id)