2017-04-13 1 views
1

Je crée un système de tirage automatique. J'ai un bouton dessiner qui va exécuter une fonction de tirage pour sélectionner un gagnant ou des gagnants et il envoie un courriel à l'administrateur. Je veux que ce soit un système complètement automatisé pour que l'admin doit seulement créer les tirages et recevoir un email avec qui a gagné après que la date de tirage soit passée. Mes tirages ont une date de tirage qui leur est associée et une fois que cela passe, j'ai besoin que la fonction soit appelée.Comment appeler des méthodes dynamiquement en fonction du temps

Comment puis-je demander à l'application de vérifier l'heure et la date pour voir si l'une des périodes de tirage est passée? J'ai regardé partout et je n'arrive pas à trouver un moyen de le faire.

+1

Bienvenue sur Stack Overflow. Votre question ne convient pas à Stack Overflow. Où avez-vous cherché, et qu'avez-vous trouvé et pourquoi cela n'a-t-il pas aidé? Avez-vous écrit du code? Si non, pourquoi? Si oui, où est le code minimum qui démontre un problème spécifique que vous avez rencontré? Veuillez lire "[ask]" et "[mcve]". Actuellement, votre question est vaste et demande des recommandations hors sujet. –

Répondre

1

Vous devriez écrire une tâche de râteau et l'ajouter à votre exécution est crontab sur le serveur. Vous pouvez utiliser la gemme whenever pour simplifier les scripts crontab et la mise à jour automatique à chaque déploiement (when-capistrano/when-mina). Exemple de votre tâche de coupe:

namespace :raffle do 

    task :check do 
    Raffle.get_winners.each do |w| 
     Mailer.send_win_mail(w).deliver_later 
    end 
    end 

end 

deliver_later est l'exécution d'arrière-plan dans la file d'attente par le pilote de file d'attente que vous utilisez (DelayedJob/Rescue/Backburner etc)

2

Vous pouvez utiliser le whenever gem pour définir un travail qui s'exécute toutes les heures (ou aussi souvent que vous le souhaitez), vérifie les dates de tirage et exécute le tirage pour tout ce qui a réussi.

2

J'utilise Clockwork dans mes applications rails chaque fois que j'ai besoin de planifier des choses. Configurez-le simplement pour exécuter un travail quand vous le souhaitez et faites votre logique dans ce travail pour voir quels tirages doivent être traités. Exemple:

Clockwork config

every(1.day, 'Raffle::CheckJob', at: '01:00') 

Job

Raffle.not_complete.find_each(batch_size: 10) do |raffle| 
    if raffle.has_ended? 
    // logic 
    end 
end 
+0

Merci beaucoup. J'essaierai. Après avoir mis en place la fonctionnalité, je l'afficherai pour référence future pour les autres. – ryanpback