RubyonRails应用程序中反复出现的任务:Cron还是其他?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

我目前正在编写一个应用程序,它从RSS源中提取新信息,并且必须以特定频率更新这些RSS源。目前,我只在用户请求提要时拉动,但我想将该行为更改为自动定期提取。

我正在编写一个与数据库交互的shell脚本,并通过cron定期开始 - 但这是双重的努力,所以我想知道做什么会是“Rails方式”或“Ruby方式”。我使用的是Ubuntu,Apache和Passenger。

提问于
用户回答回答于

我会建议做一些类似rake任务的事情,并使用gem生成你的cron作业来运行rake任务。

查看,railscasts.com/episodes/164-cron-in-ruby,了解更多关于何时gem的信息。

gem的主要好处是它可以保持应用程序内部的应用程序需求(即每x个小时在应用程序中运行cron作业),从而增加应用程序的可移植性。

用户回答回答于

即使您已经创建了一个直接方法,也需要一个rake任务。这是因为服务器管理员想要在cron中运行,可能还需要偶尔从命令行运行,这是rake任务的优点。

每当插件听起来很酷,但我不能担保。当然,知道如何从头开始做这件事很好,然后使用插件让你的生活更轻松。这是从零开始的方式。

创建一个新文件, lib/tasks/admin.rake

创建任务本身:

namespace :admin
  desc "Updates all RSS feeds"
  task :rss => :environment do
    RssFeed.update_all
  end
end

假设有一个RssFeed类,并且update_all方法完成你所期望的。可以从命令行调用它:

rake admin:rss

可以将其添加到cron(通过crontab -l作为Web用户调用)并添加以下行:

10 0 * * * cd /path/to/rails/app && rake RAILS_ENV=production admin:rss

扫码关注云+社区