2017-04-10 2 views
2

I ont une base de données qui contient quelques tweets/texte que je veux twitter posté dans un intervalle défini (par exemple: toutes les 60 secondes). Les tweets doivent parcourir une boucle for et publier un tweet à chaque intervalle de temps.Pour boucle dans l'emploi schedueler Resque en cours d'exécution dans l'intervalle de jeu

J'ai écrit une méthode qui fait pour un tweet et dort ensuite pendant 60 secondes. Cela fait essentiellement ce que j'essaye de réaliser mais doit être asynchrone et en arrière-plan. J'ai essayé et réussi l'installation de redis/resque mais je n'ai pas réussi à mettre en œuvre les travaux et à travailler. Je suis nouveau à rails et n'ai jamais mis en place un arrière-plan travailleur/travail avant.

J'ai un emploi dans Sender.rb resque mis en œuvre

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 

J'ai mis en resque selon la documentation et les dossiers autoload tout travail automatiquement.

Mais je suis actuellement en plusieurs problèmes. Comme ça, la boucle for s'exécute chaque fois que je démarre le worker (je ne l'ai jamais fait fonctionner). J'ai besoin de comprendre comment le travailleur peut parcourir les entrées de la base de données une par une chaque fois que le travail commence. Aussi comment puis-je planifié la tâche à exécuter (comme par exemple exécuter la tâche Sender.rb toutes les 60 secondes ou toutes les 24 heures, etc.)? Désolé pour le petit poste vague, mais je l'ai essayé d'envelopper ma tête autour de cela pour quelques jours et nulle part.

Répondre

0

que vous cherchez whenever bijou. Cette gem fournit une syntaxe assez facile pour écrire et déployer des tâches cron. Vous serez en mesure d'écrire dans le fichier quelque chose comme schedule.rb:

every 1.minute do 
    runner "Sender.enqueue" 
end 

Vous pouvez définir et obtenir votre numéro tweet dans Redis et après la publication de tweets incrémentons 1, comme:

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