Ruby中的.next_month问题

时间:2011-09-03 15:43:35

标签: ruby date ruby-1.9

在我当地的环境中一切正常。当我上传到我的服务器时,我不断收到内部服务器错误。我已经注释掉了我的代码,直到找到了令人讨厌的行:

 dateObj = dateObj.next_month #Problem Child

以下是完整的代码:

def makeCal(dateObj)
    cal = Hash.new
    months = 0
    while months < 12
    #   #pass dateobj to build array
      array = buildArray(dateObj)
    #   #save array to hash with month key
      monthName = Date::MONTHNAMES[dateObj.mon]
      cal[monthName] = array
    #   #create new date object using month and set it to the first
      date = dateObj.month.to_s +  '/' + 1.to_s + '/' + dateObj.year.to_s
      dateObj = Date.strptime(date, "%m/%d/%Y")
      puts dateObj.kind_of? Date
      dateObj = dateObj.next_month #Problem Child
      months = months + 1
    end
    cal

  end

ruby​​ -v local:

ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin10.8.0]

和ruby -v远程:

ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]

关于如何解决这个问题的任何想法?

更新

173.26.190.206 - - [03 / Sep / 2011 10:40:17]“POST / calendar”500 30 0.0020

那是来自nginx

这是堆栈跟踪:

NoMethodError - undefined method `next_month' for #<Date: 4911549/2,0,2299161>:
./main.rb:82:in `makeCal'
./main.rb:120:in `POST /calendar'

我插入了一行:puts dateObj.kind_of?日期

我完全正确。所以我的dateObj是亲切的日期

1 个答案:

答案 0 :(得分:1)

似乎你缺乏

require 'active_support'

顺便说一句,如果你需要的只是next_month,你可以使用

date_obj >>= 1

因为Date#>>是核心库的一部分。

编辑:

要获得本月的第一天,您可以使用:

Date.new(date_obj.year, date_obj.month)