2016-05-22 3 views
2

У меня есть приложение для рельсов, которое, по сути, запускает игру. Мне нужно «перезарядить» определенные атрибуты записей в моей базе данных через определенное время (скажем, x секунд). Каким будет лучший способ сделать это? Нужно ли использовать драгоценный камень?Периодически обновляйте модели (интервалы времени) в Rails

Я использую рельсы 4.2.6, ruby ​​2.3.0 и активную запись для своей ORM.

+1

Вам нужно выполнить это раз в каждые х секунд? Или через несколько секунд после какого-то события? Является ли он конкретным пользователем? Или вам нужно обновлять все записи независимо от каких-либо условий? – venkatKA

+0

Мне нужно сделать это каждые x секунд, если для boolean установлено значение true. Это только для подмножества пользователей (активные символы, а не те, которые мы считали «мертвыми»). – Red

ответ

3

В моделях, которые вы хотите «обновить», вы можете настроить статические методы:

# 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 

Затем, вы можете использовать всякий раз, когда gem настраивает ваше планирование на вкладке cron благодаря хорошему dsl:

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

Большая победа когда вы используете capistrano для развертывания вашего приложения: в этом случае используйте whenever capistrano integration, чтобы автоматически обновлять вкладку cron при каждом развертывании.

Счастливое расписание

Смежные вопросы