【问题标题】:How to run a command at a specific time using rails?如何使用rails在特定时间运行命令?
【发布时间】:2014-06-21 21:45:32
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    Delayed Job:您可以为每个想要收到通知的用户创建一个预定的 DelayedJob。如果执行了 DelayedJob,它会测试它是否仍然可以运行(用户是否在两者之间取消了?)。发送通知并将其他作业添加到队列中以获取下一个重复通知。

    • 专业版:应该可以很好地扩展,即使有多个服务器同时处理数百个通知。
    • 缺点:您需要设置、维护和监控堆栈中的任何其他软件。

    【讨论】:

      【解决方案2】:

      通常,此类时间由特定于任务的应用程序控制,而不是 Rails 应用程序:

      由于您可能不会为任何产品环境运行 OSX,Launchctl 只是一个出色的调度系统的示例。

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


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

      【讨论】:

        猜你喜欢
        • 2011-08-09
        • 2015-09-28
        • 2011-11-24
        • 1970-01-01
        • 1970-01-01
        • 2021-06-11
        • 1970-01-01
        • 2018-09-11
        • 1970-01-01
        相关资源
        最近更新 更多