Exécuter des tâches de Cron sur Heroku

J'ai vu que Heroku facture $15/mo pour exécuter travail retardé, et $3/mo pour exécuter tâches cron quotidien. Est-il possible d'ignorer purement et exécuter mes propres tâches cron manuellement? Ou est-ce qu'ils s'aperçoivent que je fais des tâches cron?

21
demandé sur Lance Pollard 2010-04-10 05:46:27

5 réponses

Je ne suis pas entièrement sûr de ce que vous voulez dire par "exécuter mes propres tâches cron manuellement". cron plus précisément, vous avez besoin d'accéder à crontab, qu'ils peuvent contrôler, car ils sont leurs serveurs. Si vous avez une autre manière de faire, il serait probablement très bien, mais garder à l'esprit que votre application n'est pas liée à un serveur spécifique lors de l'exécution sous Heroku, et que le serveur changement entre les exécutions.

aussi, à moins qu'ils ne l'aient changé depuis la dernière fois que j'ai vérifié, vous pouvez exécuter des tâches cron quotidiennes gratuitement, mais les coûts horaires sont de 3 $ / mo.

EDIT: Oui, les crons quotidiens sont gratuits. Voir http://addons.heroku.com/.

21
répondu Lucas Jones 2010-04-10 01:59:10

Si vous installez le Heroku gem sur votre ordinateur, vous pouvez ensuite exécuter vos tâches cron manuellement comme suit:

$ heroku rake cron
(in /disk1/home/slugs/xxxxxx_aa515b2_6c4f/mnt)
Running cron at 2010/04/25 10:28:54...

ceci exécutera exactement le même code que le cron add-on quotidien/horaire D'Heroku; c'est-à-dire que pour que cela fonctionne, votre application doit avoir un Rakefile avec un cron tâche, par exemple:

desc "Runs cron maintenance tasks."
task :cron do
  puts "Running cron at #{Time.now.strftime('%Y/%m/%d %H:%M:%S')}..."
  # TODO: your cron code goes here
end

Maintenant, ajoutez juste le heroku rake cron commande crontab sur n'importe quel serveur Unix de la vôtre, ou même directement à votre ordinateur personnel crontab si vous utilisez Linux ou Mac OS X, et vous pouvez programmer des jobs cron pour votre application Heroku comme vous le souhaitez et sans être facturé pour cela.

10
répondu Arto Bendiken 2010-04-25 17:38:29

Oui, j'ai utilisé avec succès une tâche cron sur mon serveur local qui essentiellement exécute

$ heroku rake <rake task>

à n'importe quel intervalle que j'ai demandé. J'ai utilisé du tremble et du bambou.

4
répondu dsaronin 2011-10-05 22:40:09

vous pouvez aussi juste installer un joyau comme rufus-scheduler si vous utilisez une application rails et setup scheduling de cette façon. Je ne sais pas si c'est une mauvaise pratique pour certaines raisons, mais c'est ce que je fais avec mon application, et il semble bien fonctionner.

0
répondu Steven Michael Thomas 2012-02-23 03:45:48

si vous voulez avoir des jobs programmés, vous pouvez aussi utiliser http://guardiano.getpeople.in c'est un service gratuit (pour 10 emplois) pour l'ordonnancement des travaux.

vous avez juste besoin de configurer un point final HTTP dans votre application pour recevoir des notifications d'événements sur POST ou GET et vous pouvez également définir quelques paramètres supplémentaires pour empêcher les actions non autorisées.

donc vous avez mis un travail à Guardiano qui va cal http://yourapp.com/youraction et laisser "minutes" blank si vous voulez que votre action s'exécute une fois dans le futur ou définissez minutes à ce que vous voulez exécuter votre action toutes les X minutes. De cette façon, vous n'avez qu'à créer votre endpoint pour votre application et lorsque cet EP est appelé, vous exécutez quelque chose.

ainsi votre application peut dormir et vous n'avez pas besoin de passer de l'argent et du temps à mettre en place des emplois et de prendre soin qu'ils fonctionnent correctement.

IMHO si vous avez besoin de quelque chose de rapide pour un MVP ou vous avez besoin de configurer beaucoup de travaux pour différentes applications qu'un service gratuit comme celui-là où vous pouvez effectivement externaliser cronjobs est assez bon.

il y avait un Addon D'Héroku appelé Temporize pour faire ça mais je ne suis pas sûr qu'il soit encore vivant et qu'il travaille

-5
répondu Lssslo 2015-05-31 15:52:43