2

レーキ タスクが無限ループで停止するという問題があります。これまでのところ、問題を日付範囲を配列に変換するコードに切り分けることができました。これを直接呼び出しても:

(1.month.ago.beginning_of_month..1.month.ago.end_of_month).to_a.each {|d| p d}

タスクは、同じ要素を永久に反復してハングします。

"2012-06-01 00:40:41 UTC"
"2012-06-01 00:40:41 UTC"
"2012-06-01 00:40:41 UTC"
"2012-06-01 00:40:41 UTC"
"2012-05-31 20:40:41 UTC"
"2012-05-31 20:40:41 UTC"
"2012-06-01 00:40:42 UTC"
"2012-06-01 00:40:42 UTC"
"2012-06-01 00:40:42 UTC"
"2012-06-01 00:40:42 UTC"
"2012-05-31 20:40:42 UTC"
"2012-05-31 20:40:42 UTC"
...

代わりにこれを使用する場合

(Date.new(2012,6,1)..Date.new(2012,6,30)).to_a.each {|d| p d}

すべてが機能するため、具体的には日付/時刻の ActiveSupport 拡張機能を使用する必要があります。他の誰かがこれを見たことがありますか?

これは、問題があれば、Rails 3.1 と Ruby 1.9.3 を使用した Windows ボックスの開発環境で発生します。

4

2 に答える 2

3

Time1秒の増分と最大250万のエントリで1か月の範囲を作成しています。

(1.month.ago.beginning_of_month..1.month.ago.end_of_month)
# => Fri, 01 Jun 2012 00:00:00 CEST +02:00..Sat, 30 Jun 2012 23:59:59 CEST +02:00
1.month.ago.beginning_of_month.succ
# => Fri, 01 Jun 2012 00:00:01 CEST +02:00

Date範囲を作成するには、次を使用します。

(1.month.ago.beginning_of_month.to_date..1.month.ago.end_of_month.to_date)
# => Fri, 01 Jun 2012..Sat, 30 Jun 2012
1.month.ago.beginning_of_month.to_date.succ
# => Sat, 02 Jun 2012
于 2012-07-23T14:41:54.433 に答える
1

to_dateに変換するためActiveSupport::TimeWithZoneに使用しDateます。

(1.month.ago.beginning_of_month.to_date..1.month.ago.end_of_month.to_date).
  each do |day| 
    p day
  end

これは、過去 1 か月の日数にわたって繰り返されます。

問題は、警告が発生しているsuccメソッドの使用にActiveSupport::TimeWithZoneあるようです。Time#succ is obsolete

于 2012-07-23T14:41:13.980 に答える