Ruby on Rails - 在为Rron Job设置的Rake Tasks中使用时区

时间:2009-12-31 08:36:28

标签: ruby-on-rails ruby timezone rake

我的Web应用程序需要运行6个不同的cron作业,以便在每个时区的00:01:00更新表中的时区敏感数据。我想为每个时区创建rake任务。我可以将rake任务配置为可识别时区吗?例如,我可以在rake任务中执行以下操作:

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

1 个答案:

答案 0 :(得分:2)

是的,你可以。由于:update_EST_records取决于:environment任务,因此您可以访问所有Rails环境。

只要您从模型类而不是原始SQL运行更新查询,您甚至不必调用ActiveRecord::Base.establish_connection

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