在Rails环境中运行计划任务的最佳方法是什么?脚本/跑步吗?耙?我想每隔几分钟运行一次任务。
当前回答
我不太确定,我猜这取决于任务:多长时间运行一次,有多复杂,需要与rails项目进行多少直接交流等等。我想如果做一件事只有“一种最好的方法”,就不会有那么多不同的方法了。
在我在Rails项目中的上一份工作中,我们需要制作一个批量邀请邮件(调查邀请,而不是垃圾邮件),它应该在服务器有时间的时候发送计划好的邮件。我认为我们将使用守护进程工具来运行我创建的rake任务。
不幸的是,我们公司遇到了一些资金问题,被主要竞争对手“收购”了,所以这个项目一直没有完成,所以我不知道我们最终会用什么。
其他回答
使用Craken(以rake为中心的cron作业)
我正在使用耙方法(由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)直接在你选择的排队系统上排队任务
我是资源调度程序的忠实粉丝。您不仅可以重复运行类似cron的任务,还可以在特定时间运行任务。缺点是,它需要一个Redis服务器。
无论何时(和cron)的问题是,它每次执行时都会重新加载rails环境,当任务频繁或有大量初始化工作要做时,这是一个真正的问题。由于这个原因,我在生产中出现了问题,必须警告你。
Rufus调度器为我做(https://github.com/jmettraux/rufus-scheduler)
当我有较长的作业要运行时,我使用delayed_job (https://github.com/collectiveidea/delayed_job)
我希望这能有所帮助!
最好的方法可能是使用rake来编写所需的任务,然后通过命令行执行它。
你可以在railscasts看到一个非常有用的视频
也可以看看其他资源:
Rails Rake教程
推荐文章
- 确定ActiveRecord对象是否为New
- Rails中的OO设计:在哪里放置东西
- 如何在Heroku上重新启动rails服务器?
- respond_to块如何工作?
- rails局部模板中的可选局部变量:如何退出(defined?foo)混乱?
- Ruby Bundle Symbol not found: _SSLv2_client_method (LoadError)
- rails耙任务是否提供对ActiveRecord模型的访问?
- 无法安装pg gem
- (1) libcurl不支持或禁用https协议
- Destroy和Delete的区别
- 警告:无法验证CSRF令牌真实性轨道
- Docker命令无法连接到Docker守护进程
- 如何从rake任务中提前返回?
- 每周测试一次cron作业
- 如何在Rails中显式指定模型的表名映射?