2011-12-31 85 views
0

我习惯从PHP设置CRON的URL地址,我想在一段时间内自动运行。如何在Heroku上设置Scheduler插件

现在,我尝试建立Schedular add-on在Heroku的,我有一个小问题 - 我创建的文件lib/tasks/scheduler.rake和管理部分在Heroku上建立的一切什么是可能的,但:

我有点困惑,它是如何工作 - 例如,这些线是lib/tasks/scheduler.rake

desc "This task is called by the Heroku scheduler add-on" 
task :update_feed => :environment do 
    puts "Updating feed..." 
    NewsFeed.update 
    puts "done." 
end 

task :send_reminders => :environment do 
    User.send_reminders 
end 

是什么意思任务任务:update_feed?在设定时间内将执行此操作?但这是控制器的行为?例如,如果我需要每天运行控制器home中的动作my_action,该怎么办?我应该在那里再次设置my_action而不是update_feed

回答

2

使用cron来调用一个http动作,比如使用curl或wget,你正在调度一个http请求,然后http请求导致php动作运行,并且在那个动作的代码中你有一些工作/逻辑发生。

使用heroku调度程序,您可以跳过所有http请求的东西和动作,并且可以直接将逻辑/工作放到rake任务中(或者将其放入常规ruby类或模型中,并从任务主体调用它)。

这是可行的,因为rake任务正在加载完整的rails环境(任务定义的环境依赖项部分执行此操作),因此在rake任务主体内部,您可以访问您的rails应用程序模型,所需的gem,应用程序配置,所有内容 - 就像在rails中的控制器或模型类中一样。

如果您使用的是雪松,那么还有一点不错,就是调度程序会在一次性发电机实例中调用任务,因此您的应用程序的主发电机不会被调度程序运行的任务占用,您使用cron - > http请求 - >控制器操作模式。

如果你告诉我更多关于你正在做什么的事情,我可以给出更具体的建议,但是一般来说,我通常在lib目录中的普通ruby类中定义任务的逻辑,或者作为类方法一个模型,这就是将从任务主体中调用的东西(如上面引用的示例代码)。

+0

感谢您的回复,安德鲁。我有一个问题 - 我怎样才能每月只运行一次我的任务?在Schedular的菜单提供只有选项**每日**,**每小时**,** 10分钟**。 – user984621 2011-12-31 19:23:41

+1

每天调用它,然后在任务中检查当天,如果是第一次(或其他)运行,则返回。 – 2012-01-03 22:59:13

相关问题