2016-04-17 11 views
2

自分の地域で真夜中になると、ユーザーに対していくつかのアクションを実行したいと考えています。私はサーバー時間のすべてをベースにするのではなく、タイムゾーンをサポートしたいので、私はすべてのタイムゾーンのすべての可能な真夜中をカバーしたいと思います。各タイムゾーンの真夜中にどのようにレーキタスクを実行しますか?

私が今まで持っていたアイデアは、cronで1時間ごとにトリガされるレーキタスクを作成することです。レーキタスクは、深夜に何度もタイムゾーンをチェックします。これは、特にタイムゾーンがDSTに入ったときには、非常に信頼性の低いアプローチです。

これを達成する他の信頼性の高い方法はありますか?

答えて

0

tzinfo gemを使用すると、異なるタイムゾーンをナビゲートすることができ、DSTをサポートします。 Whenever gemは、あなたのcronジョブをRubyに書くのを簡単にします。あなたのUserモデルにはThe Time Zone Databaseという名前のタイムゾーン列があると仮定します。

require "tzinfo" 

def midnight_in_timezone(timezone) 
    # assumes your server runs in utc   
    TZInfo::Timezone.get(timezone.name).local_to_utc(Time.parse('00:00am')).strftime('%H:%M%p') 
end 

set :output, "/var/log/cron_log.log" 

TZInfo::Timezone.all.each do |timezone| 
    every :day, :at => midnight_in_timezone(timezone) do 
    # pass in timezone so you can perform your task 
    # for users who match => User.where(timezone: timezone) 
    runner "SomeModel.run_your_midnight_task('#{timezone}')" 
    end 
end 

だから、あなたのschedule.rbはこのようなものになるだろう

関連する問題