【问题标题】:Running an Event Based Cron Job in Rails based on file updates?基于文件更新在 Rails 中运行基于事件的 Cron 作业?
【发布时间】:2015-10-18 04:44:39
【问题描述】:

我有一个用作后端 API 和索引器的 rails 应用程序,它必须显示许多不同产品的最新信息。所以,这不是我的设计,我们可以从当前系统获取更新的唯一方法是在一天中随机接收许多 XML 文件,我需要将这些文件抓取并放入我的数据库中。

所以我的问题有两个方面,与我如何执行这样的工作有关。

首先,我查看了 Ruby 中的各种 cron 执行程序,发现只要 gem 是基本计划的 cron 任务的流行选择,但由于这不是计划的 cron 作业,我想知道如何提示这样一个事件以及我可以使用哪些工具来完成此任务。

其次,我想知道是否有可能在 Rails 应用程序中的目录更新时从我​​的第一个问题触发 cron 作业? IE。每当我在该目录中获得一个新的 XML 文件时,我都会执行我的脚本来抓取它并将其放入数据库中。

谢谢!

【问题讨论】:

  • 您的延迟要求是多少(或者换句话说,新文件到达和处理之间的最长时间间隔是多少)?即使只有五分钟或更短的时间,我也会使用whenever。触发文件到达听起来像是一种可能导致竞争条件的方法。

标签: ruby-on-rails ruby cron


【解决方案1】:

首先cron 是一个 Unix 实用程序,在您的系统上设置后,它可以定期运行您正在寻找的任务(称为“cron 作业”)。但是,由于它是一个 Unix 实用程序,并且与 Rails 或 Ruby 没有任何连接,因此需要直接安装在您的服务器上并在 Rails 应用程序之外进行配置。具体细节取决于您的服务器环境。

一旦您安装并运行了cron,如果您想每小时在您的应用程序中执行一些命令,您可以在您的/etc/crontab(实际路径取决于您的安装方式)文件中添加一个条目,例如:

0 * * * * /home/yourapp/bin/rails runner -e production 'SomeCommand.run'

现在,whenever gem 可以帮助您自动生成 cron 文件,但它实际上不会运行任何东西,除非您将 whenever 的输出复制到您的 crontab。有一些纯 Ruby cron 替代方案,例如 rufus-scheduler,您可能更喜欢它们。不过,您仍然需要让运行它的脚本是一个长时间运行的脚本,这将需要一些服务器配置(最重要的是,如果它因任何原因而死,您将需要像 god 这样的进程监视器为你重新启动它。

第二:是的,这是可能的! watching a directory in ruby 为您提供了一些详细信息。您仍然需要设置一个长时间运行的脚本来监视该文件夹,并在添加文件时执行您的钩子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-18
    • 2020-11-20
    • 2023-03-09
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 2011-06-14
    • 2014-05-28
    相关资源
    最近更新 更多