在Rails环境中运行计划任务的最佳方法是什么?脚本/跑步吗?耙?我想每隔几分钟运行一次任务。
当前回答
使用Craken(以rake为中心的cron作业)
其他回答
我曾经也做过同样的决定,今天我对这个决定很满意。使用resque调度程序,因为不仅一个单独的redis会从你的数据库中取出负载,你还可以访问许多插件,如resque-web,它提供了一个伟大的用户界面。随着系统的发展,你会有越来越多的任务要安排,这样你就可以从一个地方控制它们。
我用了发条宝石,它对我来说工作得很好。还有一个clockwork gem允许脚本作为守护进程运行。
我最近为我一直在做的项目创建了一些cron作业。
我发现宝石发条非常有用。
require 'clockwork'
module Clockwork
every(10.seconds, 'frequent.job')
end
你甚至可以使用这个宝石来安排你的后台工作。 有关文档和进一步帮助,请参阅https://github.com/Rykian/clockwork
在我们的项目中,我们首先使用了无论何时宝石,但遇到了一些问题。
然后我们切换到RUFUS SCHEDULER gem,它在Rails中调度任务时非常简单可靠。
我们已经使用它来发送每周和每天的邮件,甚至运行一些定期的rake任务或任何方法。
这里使用的代码是这样的:
require 'rufus-scheduler'
scheduler = Rufus::Scheduler.new
scheduler.in '10d' do
# do something in 10 days
end
scheduler.at '2030/12/12 23:30:00' do
# do something at a given point in time
end
scheduler.every '3h' do
# do something every 3 hours
end
scheduler.cron '5 0 * * *' do
# do something every day, five minutes after midnight
# (see "man 5 crontab" in your terminal)
end
了解更多:https://github.com/jmettraux/rufus-scheduler
Script /runner和rake任务完全可以作为cron作业运行。
在运行cron作业时,您必须记住一件非常重要的事情。它们可能不会从应用程序的根目录被调用。这意味着你对文件(而不是库)的所有需求都应该通过显式路径完成:例如File.dirname(__FILE__) + "/other_file"。这也意味着你必须知道如何显式地从另一个目录调用它们:-)
检查您的代码是否支持从另一个目录运行
# from ~
/path/to/ruby /path/to/app/script/runner -e development "MyClass.class_method"
/path/to/ruby /path/to/rake -f /path/to/app/Rakefile rake:task RAILS_ENV=development
此外,cron作业可能不会像你那样运行,所以不要依赖于你在.bashrc中放入的任何快捷方式。但这只是一个标准的cron提示;-)
推荐文章
- 我能在视图中得到当前控制器的名称吗?
- Paperclip::Errors::MissingRequiredValidatorError with Rails
- 如何表达一个NOT IN查询与ActiveRecord/Rails?
- Ruby on Rails form_for选择字段与类
- 在Rails 4中自动加载库文件
- 在ROR迁移期间,将列类型从Date更改为DateTime
- 有没有一种方法可以获得Rails应用程序中所有模型的集合?
- ActiveRecord:大小vs计数
- 我怎么才能跳出露比·普利的怪圈?
- 向link_to添加查询字符串参数
- Rails模型中不区分大小写的搜索
- Rails:在大数字中添加逗号有Rails技巧吗?
- 使用rvmrc或ruby版本文件设置RVM项目gemset ?
- 在这个数据库中&,<<,*是什么意思?yml文件?
- 如何在控制器中使用Helper