2016-03-30 10 views
0

私は自分のRailsロガーに送る文字列を持っています。私が望むのは、各レーキタスクが実行された後、インデックスが1つ増えて次の文字列がロガーに投稿されるようにすることです。私はクラス変数を使用し、Redisを使用する従来の方法を試しました。私のインデックスは増分を拒否しています。これは私が試みたものです。rakeタスクの後に配列インデックスをインクリメント

TRY 1

accounts_controller.rb私は私の@@index変数の永続を作るためのRedisを使用しようとする2回目の試行で

class AccountsController < ApplicationController 
    cattr_accessor :index 
    @@index ||= 0 

    def self.post 
    current_user = User.find_by(:id => 1) 
    user_posts = current_user.accounts.find_by(:id => 1).posts 
    Rails.logger.info user_posts[@@index].tweet 
    end 
end 

post.rake

desc 'send post to twitter' 
task send_posts: :environment do 
    AccountsController.post 
    AccountsController.index += 1 
end 

。まだ増分はありません。

class AccountsController < ApplicationController 
    cattr_accessor :index 
    @@index = $redis.set('index', 0) 

    def self.post 
    current_user = User.find_by(:id => 1) 
    user_posts = current_user.accounts.find_by(:id => 1).posts 
    Rails.logger.info user_posts[@@index.to_i].tweet 
    end 
end 

post.rake accounts_controller.rb

desc 'send post to twitter' 
task send_posts: :environment do 
    AccountsController.post 
    #AccountsController.index += 1 
    $redis.incr('index') 
end 

は、誰かが私には、各rakeタスクを実行した後、配列の反復処理を助けることはできますか?

+1

環境をロードすると変数がリセットされます。これは、レーキタスクが実行されるたびに発生します。あなたは最終的に何をしようとしていますか?最終目標は何ですか?すべてのつぶやきを記録するには? – toddmetheny

+0

はい、つぶやきを定期的にログに記録する...それらのすべて。 – Emanuel

答えて

1

Railsが本当に(状態は熊手走る間で保存されない方法である)たびにrakeタスクの実行をロードされているので、あなたはレールのコード外インクリメント値を格納する必要があります。したがって、Redisアプローチを使用してください。

これで、すでに行ったように、incrメソッドをタスクで使用できます。 the documentationによれば、incrは、キーが存在しない場合、インクリメントする前にキーの下の値を0に設定します。

最後に、コントローラで値を0に設定しないでください。そうしないと、rakeタスクが実行されるたびに実際に値がリセットされます。

class AccountsController < ApplicationController 
    cattr_accessor :index 
    @@index = $redis.get('index') || 0 
end 

そして、それはそれでなければなりません。その代わり、Redisをから現在の値を取得するにはちょうどgetを使用しています。

1

なぜレイクタスク内のループですべてのことを行うだけではないのですか?なぜその変数を増やすのに気をつけますか?あなたはすべてのレーキの仕事の中にそれを置くことができます。

User.find_each do |user| 
    user_posts = [] 
    user.accounts.each { |account| user_posts << account.posts } 
    user_posts.each { |post| Rails.logger.info post.tweet } 
end 
+0

番号。投稿がどのくらい定期的に行われるかは、各ユーザーによって設定されます。各ユーザーの投稿の頻度は異なります。ユーザは、どのくらい頻繁に投稿を出すべきかを選択する。それは修正されていません。 – Emanuel

+0

この場合、環境へのアクセスを維持するために、作業者はレーキ作業よりも優れています。 – toddmetheny

関連する問題