Ruby on Rails - 在为 Cron 作业设置的 Rake 任务中使用时区

发布于 2024-08-16 03:10:25 字数 550 浏览 2 评论 0原文

我的 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

My web application requires 6 different cron jobs to run to update timezone sensitive data within tables at 00:01:00 of each timezone. I want to create rake tasks for each time zone. Can I configure rake tasks to be timezone aware? For e.g., can I do that following in a rake task:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

路弥 2024-08-23 03:10:25

是的,你可以。因为 :update_EST_records 依赖于 :environment 任务,所以您可以访问所有 Rails 环境。

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

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

Yes, you can. Because :update_EST_records depends on :environment task, then you have access to all your Rails environment.

You don't even have to call ActiveRecord::Base.establish_connection as long as you run the update query from your model class instead of raw SQL.

Model.update_all("...", ["CREATED_AT BETWEEN ? AND ?", value, value])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文