首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby On Rails应用程序中的重复任务: Cron还是其他?

Ruby On Rails应用程序中的重复任务: Cron还是其他?
EN

Stack Overflow用户
提问于 2010-01-17 14:31:22
回答 6查看 7.3K关注 0票数 16

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

我正在写一个Rails脚本,它将与数据库交互,并通过cron定期启动-但这需要付出大量的努力,所以我想知道做这件事的"Rails方式“或"Ruby方式”是什么。我使用的是Ubuntu,Apache和Passenger。你能推荐一些更好的方法,甚至可能包含在应用程序中,这样我就可以轻松地将应用程序部署到另一台机器上,而不必与cron打交道吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-01-17 14:47:13

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

请查看http://railscasts.com/episodes/164-cron-in-ruby,了解更多关于whenver的信息。

whenever gem的主要好处是它将应用程序的需求(即应用程序中每x小时运行一次的cron作业)保存在应用程序中,从而提高了应用程序的可移植性。

票数 19
EN

Stack Overflow用户

发布于 2010-01-17 23:04:45

我推荐以上两种方法的组合。你想要一个rake任务,即使你已经创建了一个直接的方法。这是因为您希望在cron中运行的服务器管理工作,您可能还希望偶尔从命令行运行,而这正是rake任务的优势所在。

whenever插件听起来很酷,尽管我不能保证它。当然,知道如何从头开始做事情,然后使用插件让你的生活变得更容易是件好事。这是从头开始的方法。

创建一个新文件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中(通过以web用户身份调用crontab -l )并添加以下行:

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

Stack Overflow用户

发布于 2010-01-17 14:38:32

有多种解决方案。对于最简单的设置,您可以在crontab中使用script/runner,如下所示:

10 0 * * * /home/myuser/myproject/script/runner -e production ModelName.methodname

Methodname必须是模型上的静态方法。您需要通过完整路径引用项目,否则很可能在cron环境中找不到它。如果您不熟悉,请查看crontab手册页,了解有关crontab语法的信息。例如,上面的代码在每天的第0个小时的第10分钟(简称为12:10am )运行脚本。

如果你需要一个更强大的解决方案,你可以使用BackgroundRB。BackgroundRB运行一个守护进程,支持调度任务,并且可以将结果放入数据库中。它们甚至有一个简单的通信协议,允许您的web进程请求完成一个任务,然后有一种方法来检索结果。这允许你直接从web界面控制后台作业,而不是crontab,这只是“发生”。

BackroundRB需要更多的设置才能工作,但如果需要控制作业,这可能是值得的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2080188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档