在Rails环境中运行计划任务的最佳方法是什么?脚本/跑步吗?耙?我想每隔几分钟运行一次任务。
当前回答
两者都可以正常工作。我通常使用脚本/运行器。
这里有一个例子:
0 6 * * * CD /var/www/apps/your_app/current;./script/runner——环境生产'EmailSubscription. /Send_email_subscriptions的>> /var/www/apps/your_app/shared/log/send_email_subscriptions.log 2>&1
如果加载正确的配置文件来连接数据库,也可以编写一个纯ruby脚本来完成此操作。
如果内存很宝贵,需要记住的一件事是脚本/运行器(或依赖于“环境”的Rake任务)将加载整个Rails环境。如果您只需要向数据库中插入一些记录,这将使用您实际上不必使用的内存。如果您编写自己的脚本,则可以避免这种情况。实际上我还没有必要这么做,但我正在考虑。
其他回答
我用了发条宝石,它对我来说工作得很好。还有一个clockwork gem允许脚本作为守护进程运行。
假设您的任务不需要太长时间来完成,只需为每个任务创建一个带有操作的新控制器。将任务的逻辑实现为控制器代码,然后在操作系统级别上设置一个cronjob,该cronjob使用wget以适当的时间间隔调用该控制器的URL和动作。这种方法的优点是:
拥有对所有Rails对象的完全访问权,就像在普通控制器中一样。 可以像进行正常操作一样进行开发和测试。 也可以调用你的任务adhoc从一个简单的网页。 不要通过启动额外的ruby/rails进程来消耗更多的内存。
我最近为我一直在做的项目创建了一些cron作业。
我发现宝石发条非常有用。
require 'clockwork'
module Clockwork
every(10.seconds, 'frequent.job')
end
你甚至可以使用这个宝石来安排你的后台工作。 有关文档和进一步帮助,请参阅https://github.com/Rykian/clockwork
我曾经也做过同样的决定,今天我对这个决定很满意。使用resque调度程序,因为不仅一个单独的redis会从你的数据库中取出负载,你还可以访问许多插件,如resque-web,它提供了一个伟大的用户界面。随着系统的发展,你会有越来越多的任务要安排,这样你就可以从一个地方控制它们。
我不太确定,我猜这取决于任务:多长时间运行一次,有多复杂,需要与rails项目进行多少直接交流等等。我想如果做一件事只有“一种最好的方法”,就不会有那么多不同的方法了。
在我在Rails项目中的上一份工作中,我们需要制作一个批量邀请邮件(调查邀请,而不是垃圾邮件),它应该在服务器有时间的时候发送计划好的邮件。我认为我们将使用守护进程工具来运行我创建的rake任务。
不幸的是,我们公司遇到了一些资金问题,被主要竞争对手“收购”了,所以这个项目一直没有完成,所以我不知道我们最终会用什么。
推荐文章
- Ruby:包含的反义词是什么?Ruby数组?
- 想要在Rails中找到没有关联记录的记录
- helper和helper_method做什么?
- 如何回滚只是一个步骤使用耙db:迁移
- 如何传递参数到一个Rake任务与环境在Rails?
- 如何在Rails中计算相对时间?
- 如何在Rails迁移中将可空列更改为不可空列?
- Ruby on Rails -从CSV文件导入数据
- Ruby/Rails:将Date转换为UNIX时间戳
- 如何从URL下载文件并保存在Rails中?
- 如何运行一次cron,每天晚上10点
- Rails:缺少要链接的主机!请提供:host参数或设置default_url_options[:host]
- Rails。env vs RAILS_ENV
- 如何从Ruby数组中创建平均值?
- 我能在视图中得到当前控制器的名称吗?