これは、初めてsidekiqを使用してRails 4内でスケジュールされたアクションを実行することです。空のhashtaggable_idsを検索してデータベースから削除するperformメソッドを作成しました。 Rails Console用のapiを使用してジョブを実行しようとすると、以下のエラーが表示されます。Sidekiqはジョブを実行しません
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
を、あなたは、レールコンソールで実行しようとしている - エラーが実際にあなたのメソッド内から来ていません。それを引数として渡す前に 'hashtaggable_id'を定義する必要があります。 –
最下位のメソッドをジョブに変換するための最良の方法は何でしょうか?私はhashtaggable_idの1stを見つけなければなりません。ハッシュタグのあるものがハッシュタグに接続されていないものがあります。 – RailzWithLove2035
私は実際にサイドキックで経験したスーパーではありません(私はResqueを自分で使っていますが、それは良いことではありません)。しかし、バックグラウンドジョブの中からDB接続とRailsアプリにアクセスできると思います。したがって、sidekiqメソッドでそれをリッピングする以外の理由でリファクタリングする必要はありません。 –