2013-08-20 35 views
0

我正在用2種模型,用戶和每日編寫應用程序。每個用戶擁有日常日報。我正在嘗試爲每個用戶每天午夜創建一份每日報告。我如何在rails中執行此操作?在Backbone中,我只需要找到從現在到午夜的時間,爲這段時間設置超時時間,然後創建一個新模型,並遞歸調用該函數。我查看了Rails: Reset a model attribute at specific time each day,並看到了使用when和cron的建議,但我不確定是否有更好的方法來完成我正在嘗試做的事情。每天用導軌自動創建模型的實例

我想出的一個臨時解決方案是當用戶訪問主頁時創建一個新的每日日誌,如果當前用戶還沒有與今天的日期每日。如果用戶在當天訪問主頁,則只會創建一天的報告。如果用戶在主頁周圍瀏覽,報告將不會被創建,我認爲這是一個太麻煩的解決方案,將檢查放在每個操作中。有沒有一種方法可以實現這項任務的自動化?

編輯:我的另一個想法是將after_create放入我的Daily類,然後使用與我的Backbone解決方案相同的解決方案。這是完成這個的最佳方式嗎?

+0

你應該增加,這將每天午夜在運行一個cron任務。 YOu應該在你的lib/tasks中創建一個任務。運行cron任務。您可以諮詢您的服務器系統工程師以將cron任務添加到您的服務器 –

回答

1

您應該查看寶石whenever

它可以讓你在一個非常可讀的DSL在config/schedule.rb文件中像這樣定義任務:(從寶石自述採取的例子):

every 3.hours do 
    runner "MyModel.some_process" 
    rake "my:rake:task" 
    command "/usr/bin/my_great_command" 
end 

every 1.day, :at => '4:30 am' do 
    runner "MyModel.task_to_run_at_four_thirty_in_the_morning" 
end 

every :hour do # Many shortcuts available: :hour, :day, :month, :year, :reboot 
    runner "SomeModel.ladeeda" 
end 

every :sunday, :at => '12pm' do # Use any day of the week or :weekend, :weekday 
    runner "Task.do_something_great" 
end 

every '0 0 27-31 * *' do 
    command "echo 'you can use raw cron syntax too'" 
end 

# run this task only on servers with the :app role in Capistrano 
# see Capistrano roles section below 
every :day, :at => '12:20am', :roles => [:app] do 
    rake "app_server:task" 
end 
+0

謝謝,這是我正在查看的寶石,經過一些工作後,所有工作都很順利。 –

0

我認爲這是一個背景或異步函數,所以你最好不要把邏輯放在視圖或客戶端。這不可靠。最簡單的方法是cron,但是它依賴於操作系統。 Cron也有其他缺點。如果你想要一個純紅寶石解決方案,我建議寶石發條。查看詳情:https://github.com/tomykaira/clockwork