특정 시간 동안 데이터베이스에서 임의의 레코드를 표시하고 그 후에 다른 임의의 레코드로 새로 고침합니다.레일에서 몇 분마다 변수를 어떻게 변경합니까?
어떻게하면 레일을 통해 갈 수 있습니까?
지금 당장 나는 cronjobs의 방향을보고 있는데, 언제든지 보석을 ..하지만 나는 아주 간단한 행동 인 것처럼 모든 것을 정말로 필요로하지 않는다고 100 % 확신하지 못합니까?
특정 시간 동안 데이터베이스에서 임의의 레코드를 표시하고 그 후에 다른 임의의 레코드로 새로 고침합니다.레일에서 몇 분마다 변수를 어떻게 변경합니까?
어떻게하면 레일을 통해 갈 수 있습니까?
지금 당장 나는 cronjobs의 방향을보고 있는데, 언제든지 보석을 ..하지만 나는 아주 간단한 행동 인 것처럼 모든 것을 정말로 필요로하지 않는다고 100 % 확신하지 못합니까?
Rails.cache 메커니즘을 사용하십시오. 컨트롤러에서
: 첫 번째 실행시
@record = Rails.cache("cached_record", :expires_in => 5.minutes) do
Model.first(:offset =>rand(Model.count))
end
는, 결과는 레일 캐시에 캐시됩니다. 5 분 후에 새로운 임의의 레코드가 검색됩니다.
내 모델에는 만료일이 있고 자바 스크립트 타이머가있는 사용자에게 표시됩니다. 시간이 경과 한 후, 나는 서버 (아마 아약스, 또는 어쩌면 페이지 새로 고침)에 다시 요청을 보내고 시간이 실제로 만료되었는지 확인합니다. 그렇다면 새로운 기록을 발표 할 것입니다.
당신은 단순히 컨트롤러에 현재 시간을 확인할 수 있습니다, 뭔가 같은 :
def show
@last_refresh ||= DateTime.now
@current ||= MyModel.get_random
@current = MyModel.get_random if (DateTime.now - @last_refresh) > 5.minutes
end
(가 데이터 저장을 위해 클래스 변수에 의존로) 코드의이 종류 이상의 서버로 확장되지 것, 너무 현실에서는 Redis (또는 Memcache even)와 같은 두 클래스 변수를 저장하지 않아도됩니다. 즉 고성능입니다. 얼마나 정확하게 이것을 필요로하고 얼마나 많은 성능이 필요한지에 달려 있습니다. 만료 시간을 저장하고 현재 시간 인 레코드를로드하려면 일반 데이터베이스를 사용할 수도 있습니다.
처음에는 전역에 레코드를 캐시하는 것이었지만 다른 서버에서 제공하는 다른 레코드로 끝낼 수있었습니다. 레코드에 a : selected_at datetime 열을 추가하는 방법 ...
class Model < AR::Base
def self.random
@@random = first(:conditions => 'chosen_at NOT NULL')
return @@random unless @@random.nil? or @@random.chosen_at < 5.minutes.ago
@@random.update_attribute(:chosen_at,nil) if @@random
ids = connection.select_all("SELECT id FROM things")
@@random = find(ids[rand(ids.length)]["id"].to_i)
end
end
이 예에서는 서버가 검사하지 않는다는 작은 통지 만 있습니다. 보안에 관심이있는 경우 모델 속성과 같은 값이 저장된 서버와 비교하여 보안을 확인해야합니다. – Spyros