我有一个运行40分钟的Ruby脚本,如何将其集成到Rails应用程序中?

时间:2012-05-30 17:23:39

标签: ruby-on-rails ruby

我有一个抓取网站的Ruby脚本,需要40分钟。我想做的是将结果转储到数据库中,并能够对数据进行常规ActiveRecord内容。

  1. 如果我把它放在Rails应用程序中并且有一个启动脚本的“开始”按钮,它会超时吗?
  2. 理想情况下,我希望脚本每天至少运行一次 - 并更新数据库 - 所以我最好的办法是创建一个rake任务,还是有其他方法可以做到这一点?
  3. 如果我将它包装在Rails应用程序中,我应该在哪个文件夹中放置脚本以及处理它的最佳方法是什么?我不能把它放在模型文件中 - 因为这没有任何意义。
  4. 我以前从未做过任何'Job'类型的处理,但这听起来可能属于那个范围。这样做时我还应该考虑其他什么?
  5. 编辑1:

    另一个问题是,如果我将这个特定的Ruby脚本放在我的/lib目录中,我该如何让它与数据库进行交互?我通常从模型和控制器与DB交互。如何在运行后将结果存储在我的数据库中?

4 个答案:

答案 0 :(得分:6)

我会尝试给你一些直截了当的答案。

A)你很可能将它作为后台工作。有一些体面的宝石。考虑https://github.com/defunkt/resque或更轻量级的内容,例如https://github.com/tobi/delayed_job

B)rake任务就足够了,然后用任何一个提到的库运行它。另一种选择是cron工作。

C)你应该把它放在lib /目录中。

D)您应始终提供某种处理日志,以便跟踪潜在的错误。如果您选择上述两个库中的任何一个,请务必正确阅读说明。

答案 1 :(得分:1)

答案 2 :(得分:1)

最简单的方法是将作业设置为rake任务。然后从命令行测试rake任务以确保它正常工作。

最后,将rake任务作为cronjob添加到您的服务器上,然后通过电子邮件发送生成的日志。

对于我的应用程序,我有一个“夜间”rake任务,可以处理几个子任务。它执行各种清理任务,运行夜间报告等。

作业处理系统,例如延迟作业,对于每天一次的类型任务来说可能是过度的。我的应用程序也使用延迟作业,但是对于许多客户端全天发起的任务。

请记住,您还需要一个进程来观察延迟作业过程(并在必要时重新启动它)。我使用runit,还有其他选择。

答案 3 :(得分:1)

使用whenever gem执行cron作业。