2016-04-26 15 views
0

これは、初めて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 
+0

を、あなたは、レールコンソールで実行しようとしている - エラーが実際にあなたのメソッド内から来ていません。それを引数として渡す前に 'hashtaggable_id'を定義する必要があります。 –

+0

最下位のメソッドをジョブに変換するための最良の方法は何でしょうか?私はhashtaggable_idの1stを見つけなければなりません。ハッシュタグのあるものがハッシュタグに接続されていないものがあります。 – RailzWithLove2035

+0

私は実際にサイドキックで経験したスーパーではありません(私はResqueを自分で使っていますが、それは良いことではありません)。しかし、バックグラウンドジョブの中からDB接続とRailsアプリにアクセスできると思います。したがって、sidekiqメソッドでそれをリッピングする以外の理由でリファクタリングする必要はありません。 –

答えて

0

RemoveHashtagOrphans.new.perform(hashtaggable_id)は、処理中のジョブをインスタンス化して実行します。 RemoveHashtagOrphans.perform_later(hashtaggable_id)を使用して、Sidekiqにジョブを送信します。あなたは未定義の変数があるので失敗し

あなたのコードは:コードで

hashtaggable_id = 10 
RemoveHashtagOrphans.new.perform(hashtaggable_id) 
+0

はい、new.performで動作することをテストしようとしています。その後、私はproduction_laterメソッドを使用して[RemoveHashtagOrphans.perform_at(1.month.from_now)]を使用するつもりでした。 hashtaggable_idは未定義のメソッドとみなされるので、うまくいきません。 – RailzWithLove2035

+0

その変数が存在しないためです。更新を参照してください。 –

+0

どのようにすれば、すべてのレコードをsimple_hashtag_hashtaggingsテーブルからperformメソッドに渡しますか。私は必ずしも特定のIDを検索する必要はありませんが、すべてを見つける。 performメソッドに引数が必要ですか? defハッシュタグ= SimpleHashtag :: Hashtag.allを使うことはできますか? .... endもし私はテーブル内のすべてのhashtaggable_idを見つけて、アクションを実行することができます。それはうまくいくでしょう。 – RailzWithLove2035

関連する問題