6

这是我第一次安排任务,我不确定最佳实施(或正确实施)。

我的目标: 我用 twilio 设置了一个 ruby​​ on rails 4 应用程序并部署在 Heroku 上。我希望该应用程序每周使用自定义短信(由数据库中的信息编写和创建)自动向我的所有用户发送一次短信。

通过研究,我得出了以下宝石:无论何时Rufus-Scheduler

我相信这两个宝石都可以完成工作,但是在阅读 Rufus 的文档后:“请注意:rufus-scheduler 不是 cron 替代品”,我试图了解我想要的是否确实是 cron 工作或一个“鲁弗斯调度程序”。

我留下了以下问题:什么是 cron 作业以及何时使用它?为什么 Rufus-Scheduler 不是 cron 替代品,它有什么不同?我应该使用哪一个?

4

4 回答 4

2

rufus-scheduler 不是 cron 替代品

可以扩展为“rufus-scheduler 从未被编写为 cron 的替代品”。更大的信息是“你是一名开发人员,作为一名开发人员,你应该知道你继承的环境和它附带的工具。你应该知道什么时候使用它们,什么时候模仿它们,什么时候替换它们。”

Rufus-scheduler 理解 Cron 的“* * * * *”语法。这导致一些人说“rufus-scheduler 试图成为 Cron 的替代品”。最好将其表述为“有些人滥用了 rufus-scheduler,而不是认为(知道)老忠实的 Cron 在那种情况下会更好”。

要成为一名优秀的开发人员,你应该认真考虑一些 *nix 系统管理员技能,否则你会很痛苦。它可以像“在您的系统中的 VirtualBox 中安装、运行和管理一个 linux 机器”一样简单。

rufus-scheduler 调度在 Ruby 进程中运行。在一个普通的世界里,一个在服务 http 请求(Rails 或 Sinatra Web 应用程序)的同一个 Ruby 进程中运行 rufus-scheduler,而且,哦,糟糕,当应用程序不运行时,调度程序不会运行。

Cron 是您的 *nix 操作系统提供的一项服务。您主机上的其他应用程序和服务依赖它。Cron 读取其 crontab 并在给定时间运行其中指示的脚本。感谢优秀的每当,Cron 可以被告知在你的 Rails 应用程序中运行脚本。

您可能也会对此感兴趣:https ://devcenter.heroku.com/articles/clock-processes-ruby

于 2014-04-30T06:25:42.937 回答
1

cron 作业是使用 cron 软件按自动时间表运行的程序。

Rufus-Scheduler 与 cron 不同,因为它在 Ruby 进程内部运行。

对于您所描述的,我相信两者都可以。

于 2014-04-30T03:09:48.087 回答
1

关于克朗:

Cron 是在nix 系统上执行计划任务的程序的名称。什么是 Windows 中的计划任务,Cron 在概念层面上为 Linux 做了类似的事情。Cron 是 Linux 或类似 UNIX 的操作系统中最有用的工具之一。cron 服务(守护进程)在后台运行并不断检查 /etc/crontab 文件和 /etc/cron. /目录。它还检查 /var/spool/cron/ 目录。

在 Heroku 上调度任务

好消息是,在 Heroku 上有一个名为 Scheduler 的东西,它是一个附加组件,用于按预定时间间隔在您的应用程序上运行作业,就像传统服务器环境中的 cron 一样。所以你真的不需要像任何时候那样摆弄/播放 cron 或 gems。只需在 Heroku 上使用调度程序插件。

有关更多信息,请参阅:https ://devcenter.heroku.com/articles/scheduler

于 2014-04-30T03:06:21.197 回答
0

whenever允许您编写将转换为 crontab 文件的 ruby​​ 代码,该文件指定一组命令和每个命令的频率。该文件由cron使用。

rufus-scheduler是纯 ruby​​,您编写 ruby​​ 并且作业在 ruby​​ 中运行,例如在您的应用程序循环调用scheduler.join中,或在另一个线程调用ruby your/rufus_scheduler_script.rb中。

在我看来,他们做同样的事情,使用 cron 你正在使用 linux 命令,但我没有看到任何其他区别。

还有其他选择,根据我的经验,我遇到了 rufus-scheduler 的问题,并且无论何时(他们在我的 Rails 应用程序中没有找到课程,但可能只是一个怪癖),另一方面,发条对我有用。

于 2014-04-30T03:13:13.830 回答