2009-12-31 13 views
0

Mon application Web nécessite 6 tâches cron différentes pour exécuter la mise à jour des données sensibles du fuseau horaire dans les tables à 00:01:00 de chaque fuseau horaire. Je veux créer des tâches de rake pour chaque fuseau horaire. Puis-je configurer les tâches rake pour être averti du fuseau horaire? Par exemple, puis-je faire cela après une tâche de commission:Ruby on Rails - Utilisation de fuseaux horaires dans Rake Tâches définies pour Cron Job

namespace :db do 
    task :update_EST_records => :environment do 
     Time.zone = "Eastern Time (US & Canada)" 
     sql = "UPDATE QUERY GOES HERE WITH CREATED_AT BETWEEN ? AND ?" 
     ActiveRecord::Base.establish_connection 
     ActiveRecord::Base.connection.execute(sql, 
      Time.zone.now.beginning_of_day.utc, 
      Time.zone.now.end_of_day.utc) 
    end 
end 

Répondre

2

Oui, vous pouvez. Parce que :update_EST_records dépend de la tâche :environment, alors vous avez accès à tout votre environnement Rails.

Vous n'avez même pas besoin d'appeler ActiveRecord::Base.establish_connection tant que vous exécutez la requête de mise à jour à partir de votre classe de modèle au lieu de SQL brut.

Model.update_all("...", ["CREATED_AT BETWEEN ? AND ?", value, value])