如何使用rails在特定时间运行命令?

时间:2014-06-21 21:45:33

标签: ruby-on-rails ruby datetime timer whenever

我创建了一个Rails应用程序,它向移动设备发送推送通知;我希望用户能够选择发送通知的时间,就像闹钟一样。我已经研究了Whenever gem,但似乎只要期望的时间也发生变化,应用程序就需要更新。根据用户的偏好,所需时间可能随时变化。

2 个答案:

答案 0 :(得分:1)

我会考虑两种不同的方法:

Cron :您可以拥有一个cron任务,每隔x分钟启动一个带有script/runner "PushNotifier.perform"的Rails方法。在该方法中,您将检查自上次运行以来需要通知的用户。

  • Pro :Cron非常可靠,可以在每个Linux机器上使用。
  • Con :如果您的任务花费的时间超过了cron间隔,会发生什么?你必须考虑这样的问题。扩展可能是一个挑战。

延迟作业:您可以为每个想要收到通知的用户创建计划的DelayedJob。如果执行了DelayedJob,它会测试它是否仍然是一个可以运行的东西(用户之间取消了吗?)。发送通知并将其他作业添加到队列以进行下一次定期通知。

  • Pro :即使多个服务器同时处理数百个通知,也应该可以很好地扩展。
  • Con :您需要设置,维护和监控任何其他软件到您的堆栈。

答案 1 :(得分:0)

通常,此类时间由特定于任务的应用程序控制 - 而非rails应用程序:

因为probalby不会为任何prod环境运行OSX,所以Launchctl只是一个很好的调度系统的例子。

使用cron,您可以通过有权访问crontab -e的shell并运行您的rails应用程序(或小型辅助导轨app / sinatra)并添加新条目。像CronEdit这样的代码可以让你在Ruby中做到这一点


系统实用程序,如Cron,简单可靠。它们运行时具有微小的CPU和内存占用空间,并且经过长期的可靠性检查。它们是比rails应用程序更好的生产解决方案。