2011-09-08 4 views
0

J'essaye de créer une fonctionnalité de liste de diffusion dans Rails basée sur delayed_jobs. Pour l'instant j'envoie des mails en itérant sur une table d'utilisateurs et .deliver un mail à chaque adresse mail. Comment puis-je l'intégrer dans delayed_jobs, donc il envoie 50 mails toutes les 5 minutes et se souvient quelles adresses sont déjà faites? Ai-je besoin de faire une table séparée où je stocke tous les mails envoyés et de vérifier à chaque fois que j'envoie 50 autres mails?Envoie 50 mails toutes les 5 minutes avec delayed_jobs

merci d'avance.

+2

Votre question est essentiellement "comment puis-je écrire l'ensemble de l'application", et la seule façon dont nous pourrions répondre est de l'écrire pour vous. Ce n'est pas ce que le SO est pour. Essayez-le, et quand vous êtes coincé sur un problème spécifique, revenez et demandez de l'aide. – meagar

+0

Vous savez que je ne vois vraiment pas ça. – mark

Répondre

0

50 e-mails ne sont pas vraiment beaucoup peuvent être envoyés en quelques secondes, je pense. Utilisez foreverb pour envoyer des e-mails toutes les 5 minutes.

+0

50 mails par 5 minutes à cause de spam ... – Tronic

4

Vous voudrez probablement avoir des entrées de table pour les emails envoyés. De cette façon, il sert de piste de vérification si les processus tombent en panne ou en quelque sorte échouer. Nous vous suggérons de le faire avec une base de données de nuages ​​élastiques comme MongoLab, MongoHQ ou SimpleDB. (Les services basés sur Mongo facilitent l'extension du schéma pour les nouvelles entrées de messagerie.)

Si vous faites cela, une file d'attente de travail dans le cloud comme SimpleWorker peut faciliter l'envoi simultané de nombreux courriels ou par lots pour obtenir autour de toutes les limites de taux. (divulgation complète: je travaille sur Iron.io/SimpleWorker)

Vous envisagez une bonne approche pour regrouper plusieurs envois de courrier électronique dans une seule tâche de travail afin d'amortir les coûts de configuration du travail. Avec un système de travail en nuage élastique, vous pourriez faire en sorte que les travailleurs principaux ne respectent pas le calendrier, puis mettre en file d'attente un certain nombre de tâches d'esclave, chacune avec un ensemble d'utilisateurs à envoyer. Avec les entrées de table, vous pouvez ensuite parcourir les tableaux de données et adresser tous les e-mails qui ont échoué ou n'ont pas été traités.

0

Soit l'emploi retardé faire tout le travail:

User.all.each_with_index |user, index| 
    Mailer.delay({:run_at => ((index/50) * 5).minutes.from_now}).send_newsletter(user) 
end 

Cela devrait fonctionner, mais non testé.

Questions connexes