我习惯使用PHP在URL地址上设置CRON,我想在一个时间间隔内自动运行。
现在我尝试在Heroku设置Schedular add-on并且我遇到了一些问题 - 我创建了文件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 是什么意思?在设置小时将运行此动作?但这是控制器中的动作?例如,如果我需要每天在控制器my_action
中运行操作home
该怎么办?我应该再次设置my_action
而不是update_feed
?
答案 0 :(得分:2)
使用cron调用http动作,例如使用curl或wget,你正在调度一个http请求,然后http请求导致php动作运行,并且在该动作的代码中你有一些工作/逻辑发生。
使用heroku调度程序,您正在跳过所有http请求内容和操作内容,并且可以将逻辑/工作直接放入rake任务中(或者将其放在常规ruby类或模型中并从任务主体调用它)
这是因为rake任务正在加载完整的rails环境(任务定义的环境依赖部分执行此操作),因此在rake任务主体内部,您可以访问rails应用程序模型,所需的gem,应用程序配置,一切 - 就像在rails中的控制器或模型类中一样。
如果您使用雪松,那么调度程序在一次性发电机实例中调用任务也是很好的,因此您的应用程序的主发电机不会被调度程序运行的任务占用,而您的情况则不然。使用cron - > http请求 - >控制器动作模式。
如果你告诉我更多关于你要做什么的事情,我可以给出更具体的建议,但一般来说我通常在lib目录中的普通ruby类中定义任务的逻辑,或者作为一个类方法。模型,这是从任务主体调用的内容(如上面引用的示例代码中所示)。