나는 경매 사이트와 비교할 수있는 응용 프로그램을 만들고 있습니다.레일즈가 설정된 시간이 지나면 동작이 발생합니다.
"경매"에는 마감 기한이 설정되어 있으므로 내 질문은이 경매가 해당 시간에 "폐쇄"되도록 설정하는 방법입니다.
예
를 들어경매 A : 이 2012년 12월 25일 오전 9 닫습니다.
어떻게하면 현재 "폐쇄"되어 있는지 확인합니까?
나는 경매 사이트와 비교할 수있는 응용 프로그램을 만들고 있습니다.레일즈가 설정된 시간이 지나면 동작이 발생합니다.
"경매"에는 마감 기한이 설정되어 있으므로 내 질문은이 경매가 해당 시간에 "폐쇄"되도록 설정하는 방법입니다.
예
를 들어경매 A : 이 2012년 12월 25일 오전 9 닫습니다.
어떻게하면 현재 "폐쇄"되어 있는지 확인합니까?
나는 단순히 타임 스탬프와 방법 및 범위에 대해 설명하겠다.
Time.now
closed
(그리고 아마도 open
) scope을 추가를 확인하여 모델의 closed?
(그리고 아마도 open?
) 메소드를 정의 어쩌면 open_until
default_scope
reference로 중 하나를 설정합니다.
Auction.open.all #=> all open auctions
Auction.closed.all #=> all closed auctions
Auction.first.closed? #=> true if 'open_until' is in the past, false otherwise
Auction.first.open? #=> true if 'open_until' is in the future, false otherwise
당신이 사용하는 경우 default_scope
(예 open
), 및 (예를 들어 closed)
Auction.unscoped.closed
reference를 호출해야합니다.
을 당신이 경매를 종료하는 옵션을 필요로 할 때 다른 주와 함께 경매를 찾을 필요 (즉, 통과하는 open_until
를 기다리지 않고) 즉시 당신은 단순히 추가 부울 플래그없이,이 작업을 수행 할 수 있습니다 : 위대한 솔루션 및 설명에 대한
def close!
self.update_attribute(:open_until, 1.second.ago)
end
예를 들어 특정 시간에 true로 설정하려는 Auction
모델에 :closed
속성이있는 경우 주기적으로 rake 작업을 실행하여 닫을 새 Auction
을 확인하는 cron을 실행해야합니다 .
는 예를 들어, 당신은 다음에이 레이크 작업을 실행할 수 있습니다
rake myapp:close-auctions
을 실행하여이 rake
를 통해 호출 할 수있는 다음과 같은 내부
namespace :myapp do
task "close-auctions" => :environment do
Auctions.where("closes_at < ? and closed = ?", Time.zone.now, false).update_all(closed: true)
end
end
같은 뭔가 lib/tasks/close_auctions.rake
에서 파일을 만들 수 있습니다 너의 crontab에있는 cron. 매 순간을 위해 당신은 그 마킹,
* * * * * RAILS_ENV=production rake myapp:close-auctions > /dev/null 2>&1
, 레일 과거에 새로하는 :closes_at
값이 여전히 열려 있지만 Auction
인스턴스를 찾을 수 귀하의 crontab에 이런 식으로 뭔가를 추가 것 인스턴스가 닫힌 것으로 나타납니다.
감사를 0.간단한 질문입니다."* * * * * RAILS_ENV = production rake myapp : close-auctions>/dev/null 2> & 1"이 특정 파일로 이동하여 cron 작업으로 실행됩니까? 대신에 이것을 사용하는 것이 더 쉽고/더 낫습니까? http://railscasts.com/episodes/164-cron-in-ruby? – JamesWatling
'언제든지 '는 위의 명령을 "간단하다"처럼 crontab에 작성하는 도구 일뿐입니다. '언제든지 '는 당신과 crontab 사이의 "중매인"이기 때문에 최종 결과가 동일하기 때문에 실제로는 필요하지 않습니다 : 위와 같은 명령. – deefour
명령의 위치는'crontab -e'를 실행하기 위해 배포하는 사용자로서 편집기에서 cron 명령을 추가 할 쉘이 열립니다. 나는이 프로세스를 더 간단하게하기 위해 언제나 카피스트라노 (또는 다른 배포 도구)가 어떻게 통합 될지 말할 수 없다. – deefour