2017-04-10 6 views
2

나는 일정한 간격 (예 : 매 60 초마다)으로 트위터에 게시하려는 일부 트윗/텍스트가 포함 된 데이터베이스를 가지고 있습니다. 트윗은 for 루프를 반복하고 매 시간마다 하나의 트윗을 게시해야합니다.loop in job schedueler 설정된 간격으로 실행되는 Resque

나는 하나의 짹짹에 대해 이것을 수행하고 60 초 동안 잔다하는 방법을 작성했습니다.

class TweetsController < ApplicationController 

    def create 
     Tweet.all.each do |t| 
      current_user.tweet(t.text) 
      sleep 60 
     end 
     end 
end 

기본적으로 내가 달성하려고 시도하지만 비동기식이어야하며 백그라운드에서 수행해야합니다. 나는 redis/resque 설치를 시도하고 성공했지만 작업을 구현하고 작동시키지 못했습니다. 나는 레일을 처음 사용하고 전에 배경 작업자/작업을 설정하지 않았습니다.

나는 resque에서 Sender.rb 작업은 내가 모든 작업이 자동으로 폴더 문서 및 자동로드에 따라 resque 구현 한

class Sender 
    def self.queue = :tweets_queue end 

     def self.perform user_id 
      Tweet.all.each do |t| 
       current_user.tweet(t.text) 
      end 
     end 

    end 

을 구현했습니다.

하지만 현재 몇 가지 문제가 있습니다. 이와 같이 for 루프는 작업자를 시작할 때마다 실행됩니다 (나는 결코 실행하지 못한다). 작업이 시작될 때마다 데이터베이스 항목을 하나씩 반복하는 방법을 알아야합니다. 또한 작업을 실행하도록 예약하는 방법 (예 : 60 초마다 또는 24 시간마다 Sender.rb 작업 실행) 작은 막연한 게시물에 대해 유감스럽게 생각합니다.하지만 며칠 동안 내 머리를 감싸고 아무데도 못가려고 노력했습니다.

답변

0

당신은 whenever 보석을 찾고 있습니다. 이 보석은 cron 작업을 작성하고 배포하기위한 아주 쉬운 구문을 제공합니다. 당신은 같은 schedule.rb 파일 뭔가를 쓸 수 있습니다 :

every 1.minute do 
    runner "Sender.enqueue" 
end 
당신이 설정 한 후 레디 스에서 트윗 번호를 얻을 수 있습니다

및 게시 트윗 후처럼 1을 증가 :

offset = redis.get('offset') 
Tweet.offset(offset - 1).first