【问题标题】:Updating models periodically (intervals of time) in Rails在 Rails 中定期(时间间隔)更新模型
【发布时间】:2016-05-22 17:08:43
【问题描述】:

我有一个 Rails 应用程序,它本质上是在运行游戏。我需要在一定时间(比如 x 秒)后“充值”我的数据库中记录的某些属性。最好的方法是什么?我需要使用宝石吗?

我正在为我的 ORM 使用 rails 4.2.6、ruby 2.3.0 和活动记录。

【问题讨论】:

  • 您需要每 x 秒完成一次吗?或者某个事件发生后 x 秒?它是用户特定的吗?或者您需要更新所有记录而不考虑任何条件?
  • 如果布尔值设置为 true,我需要每 x 秒执行一次。它仅适用于一部分用户(活跃角色,而不是我们认为“已死”的角色)。

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord rubygems


【解决方案1】:

在你想要“刷新”的模型中,你可以设置静态方法:

# app/models/product.rb

class Product < ActiveRecord::Base
 // some code

 def self.refresh_stocks
   // some code
 end

 def self.refresh_thumbnails
   // some code
 end

end

那么,我建议你定义一些custom rake tasks

# lib/tasks/myapp.rake
namespace :myapp do
  namespace :products do
    desc 'Refresh products'
    task refresh: :environment do
      Product.refresh_stocks
      Product.refresh_thumbnails
    end
  end
end

然后,借助一个不错的 dsl,您可以使用无论何时 gem 在您的 cron 选项卡中设置您的日程安排:

# config.schedule.rb
every 1.hour do
  rake "myapp:products:refresh"
end

当您使用 capistrano 部署您的应用时,一个巨大的胜利:在这种情况下,使用 whenever capistrano integration 在每次部署时自动刷新您的 cron 选项卡。

愉快的安排

【讨论】:

    猜你喜欢
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多