ruby-on-rails - 基于文件更新在 Rails 中运行基于事件的 Cron 作业?

标签 ruby-on-rails ruby cron

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

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

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

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

谢谢!

最佳答案

首先: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有一些细节给你。您仍然需要设置一个长时间运行的脚本来监视该文件夹,并在添加文件时执行 Hook 。

关于ruby-on-rails - 基于文件更新在 Rails 中运行基于事件的 Cron 作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31662563/

相关文章:

ruby-on-rails - xlsx中的文件加密密码

php - 在 Media Temple 网格服务上运行 CakePHP Cron 作业

mysql - 将 sql 文件转储到 Heroku 中的 ClearDB

ruby-on-rails - 使用旧版本的 Rake

ruby-on-rails - 如何运行sqlplus centOS?

ruby-on-rails - bcrypt 错误 : Devise ruby 2. 0 和 rails 4.0

python - Cron 终止 Python 脚本?

java - 使用 Quartz 库,如何从数据库表中读取 cron 表达式,而不是从属性文件中获取

ruby-on-rails - 我如何在Rails应用程序中看到ENV变量?

ruby-on-rails - 在 ActionMailer 中发送电子邮件时出现类型错误