在Rails环境中运行计划任务的最佳方法是什么?脚本/跑步吗?耙?我想每隔几分钟运行一次任务。
当前回答
我使用backgrounddrb。
http://backgroundrb.rubyforge.org/
我用它来运行预定的任务以及对于正常的客户机/服务器关系花费太长时间的任务。
其他回答
最好的方法可能是使用rake来编写所需的任务,然后通过命令行执行它。
你可以在railscasts看到一个非常有用的视频
也可以看看其他资源:
Rails Rake教程
我正在使用耙方法(由heroku支持)
使用名为lib/tasks/cron的文件。rake . .
task :cron => :environment do
puts "Pulling new requests..."
EdiListener.process_new_messages
puts "done."
end
要从命令行执行,这就是“rake cron”。然后可以根据需要将此命令放到操作系统cron/任务调度程序上。
更新这是一个相当老的问题和答案!一些新信息:
我引用的heroku cron服务已经被heroku Scheduler所取代 对于频繁的任务(特别是当你想避免Rails环境启动成本时),我的首选方法是使用系统cron来调用一个脚本,该脚本将(a)戳一个安全/私有webhook API来在后台调用所需的任务,或者(b)直接在你选择的排队系统上排队任务
假设您的任务不需要太长时间来完成,只需为每个任务创建一个带有操作的新控制器。将任务的逻辑实现为控制器代码,然后在操作系统级别上设置一个cronjob,该cronjob使用wget以适当的时间间隔调用该控制器的URL和动作。这种方法的优点是:
拥有对所有Rails对象的完全访问权,就像在普通控制器中一样。 可以像进行正常操作一样进行开发和测试。 也可以调用你的任务adhoc从一个简单的网页。 不要通过启动额外的ruby/rails进程来消耗更多的内存。
无论何时(和cron)的问题是,它每次执行时都会重新加载rails环境,当任务频繁或有大量初始化工作要做时,这是一个真正的问题。由于这个原因,我在生产中出现了问题,必须警告你。
Rufus调度器为我做(https://github.com/jmettraux/rufus-scheduler)
当我有较长的作业要运行时,我使用delayed_job (https://github.com/collectiveidea/delayed_job)
我希望这能有所帮助!
你可以使用resque和resque- scheduling gem来创建cron,这很容易做到。
https://github.com/resque/resque
https://github.com/resque/resque-scheduler
推荐文章
- 我能在视图中得到当前控制器的名称吗?
- 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