2011-12-31 84 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

相關問題