確かに非常に奇妙なエラー。毎月自分自身のクローンを作成し、将来、次のオブジェクトにscheduled_on
日付を設定するアイテムがあります。+ 1.months
しかし、それからこれが起こりました:
Sun, 01 Apr 2012 16:00:00 PDT -07:00
Tue, 01 May 2012 16:00:00 PDT -07:00
Fri, 01 Jun 2012 16:00:00 PDT -07:00
Sun, 01 Jul 2012 16:00:00 PDT -07:00
Wed, 01 Aug 2012 16:00:00 PDT -07:00
Fri, 31 Aug 2012 17:00:00 PDT -07:00 # <--- What in the..
コード :
def clone_object
objects = []
Time.zone = account.timezone
Chronic.time_class = Time.zone
now = last_scheduled_on.to_time # <- this would have been Wed, 01 Aug 2012 16:00:00 PDT -07:00
new_date = now + 1.months
new_schedule = Time.zone.parse new_date.strftime('%Y-%m-%d' + ' ' + original_scheduled_on.strftime('%H:%M:%S'))
objects << clone!(:scheduled_on => new_schedule, :recurring_job_id => id)
end
これは、実際のコードの非常に切り捨てられたバージョンです。しかし、それは私がこの問題に合理的に影響を与えているすべての部分を含みます。
だから問題は..そのエラーがどのように発生した可能性があるのでしょうか?
アップデート
これはタイムゾーンに関連していると確信しています。
UTCでの日付は次のとおりです。
In UTC :
Sun, 01 Apr 2012 23:00:00 UTC +00:00
Tue, 01 May 2012 23:00:00 UTC +00:00
Fri, 01 Jun 2012 23:00:00 UTC +00:00
Sun, 01 Jul 2012 23:00:00 UTC +00:00
Wed, 01 Aug 2012 23:00:00 UTC +00:00
Sat, 01 Sep 2012 00:00:00 UTC +00:00
Sun, 30 Sep 2012 23:00:00 UTC +00:00
ここでそれらは太平洋に変換されます:
In Pacific
Sun, 01 Apr 2012 16:00:00 PDT -07:00
Tue, 01 May 2012 16:00:00 PDT -07:00
Fri, 01 Jun 2012 16:00:00 PDT -07:00
Sun, 01 Jul 2012 16:00:00 PDT -07:00
Wed, 01 Aug 2012 16:00:00 PDT -07:00
Fri, 31 Aug 2012 17:00:00 PDT -07:00
Sun, 30 Sep 2012 16:00:00 PDT -07:00
また、ここに入力したコードはサーバーに対して正確ではないことにも注意しました。サーバーのTime.zoneは、アカウントのタイムゾーンではなく、最後のジョブに設定されています。これは、タイムゾーンがフローティングで動的であることを意味します(または少なくとも私はそれが意味すると思います)。しかし、カリフォルニアの夏時間は9月ではなく、11月まで切り替わらないため、これも気になります。