2

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

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

编辑1:

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

4

4 回答 4

6

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

A)您很可能会将其作为后台工作。有一些不错的宝石。考虑https://github.com/defunkt/resque或更轻量级的东西,例如https://github.com/tobi/delayed_job

B)一个 rake 任务就足够了,然后使用上述任何一个库运行它。另一种选择是 cron 作业。

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

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

于 2012-05-30T17:29:40.033 回答
1

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

最后,将 rake 任务作为 cronjob 添加到您的服务器上,并让您自己通过电子邮件发送结果日志。

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

对于一天一次的类型任务,诸如延迟作业之类的作业处理系统可能会过度杀伤力。我的应用程序也使用延迟作业,但对于许多客户端启动的任务来说,它是全天的。

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

于 2012-05-30T17:37:17.097 回答
1

https://github.com/collectiveidea/delayed_job

于 2012-05-30T17:28:37.540 回答
1

每当 gem执行 cron 作业时使用。

于 2012-05-30T17:41:30.880 回答