簡體   English   中英

Ruby 1.8.7 / 1.9.2上Rails 3中類'Date'的未定義方法'>>'

[英]Undefined method '>>' for class 'Date' in Rails 3 on Ruby 1.8.7/1.9.2

我正在Ruby 1.8.7-p174上運行Rails 3.0.0應用程序。 一切都進行得很順利,直到我嘗試進行一些測試:

/Users/avand/.rvm/gems/ruby-1.8.7-p174/gems/activesupport-3.0.0/lib/active_support/core_ext/date/calculations.rb:9: undefined method `>>' for class `Date' (NameError)
from /Users/avand/.rvm/gems/ruby-1.8.7-p174/gems/activesupport-3.0.0/lib/active_support/ruby/shim.rb:12:in `require'
from /Users/avand/.rvm/gems/ruby-1.8.7-p174/gems/activesupport-3.0.0/lib/active_support/ruby/shim.rb:12
from /Users/avand/.rvm/gems/ruby-1.8.7-p174/gems/actionpack-3.0.0/lib/abstract_controller.rb:6:in `require'
from /Users/avand/.rvm/gems/ruby-1.8.7-p174/gems/actionpack-3.0.0/lib/abstract_controller.rb:6

我看了一下Calculations類,注意到undef是用:>>調用的。 但是Ruby 1.8.7 Date沒有>>方法。 我想我會用一個條件包裝它: if respond_to?(:>>) 在這段時間里事情進一步發展:

/Users/avand/.rvm/gems/ruby-1.9.2-rc2/gems/activesupport-3.0.0/lib/active_support/core_ext/date/calculations.rb:91:in `alias_method': undefined method `+' for class `Date' (NameError)
from /Users/avand/.rvm/gems/ruby-1.9.2-rc2/gems/activesupport-3.0.0/lib/active_support/core_ext/date/calculations.rb:91:in `<class:Date>'
from /Users/avand/.rvm/gems/ruby-1.9.2-rc2/gems/activesupport-3.0.0/lib/active_support/core_ext/date/calculations.rb:7:in `<top (required)>'
from /Users/avand/.rvm/gems/ruby-1.9.2-rc2/gems/activesupport-3.0.0/lib/active_support/ruby/shim.rb:12:in `require'
from /Users/avand/.rvm/gems/ruby-1.9.2-rc2/gems/activesupport-3.0.0/lib/active_support/ruby/shim.rb:12:in `<top (required)>'
from /Users/avand/.rvm/gems/ruby-1.9.2-rc2/gems/actionpack-3.0.0/lib/abstract_controller.rb:6:in `require'

第二個堆棧跟蹤是Ruby 1.9.2。 在沒有我的respond_to?情況下,Ruby 1.9.2出現了相同的錯誤respond_to? 使用Ruby 1.8.7進行檢查。

我注釋掉了lib中的Date擴展名。 這僅在測試環境中發生。

有什么想法嗎?

因此,這可能不是最有用的答案,但這是到目前為止我所能確定的全部。

有問題的文件:activesupport-3.0.0 / lib / active_support / core_ext / date / calculations.rb刪除了您所看到的:>>的定義。 如果該文件需要兩次,則由於不再在Date類上定義該方法,因此第二次加載該文件將失敗。

那么,為什么需要兩次此文件? 我真的不確定。 我已經看到,當您一次指定具有完整路徑的文件,然后又一次依賴於LOAD_PATH來指定具有完整路徑的文件時,針對此問題的保護可能會出錯(如果您將其稱為錯誤,可能只是一個限制)。更正其中的文件夾以找到該文件。

我將仔細閱讀您的代碼,看看需要使用rails / all或activesupprt / railstie是什么,希望您會看到兩個看起來略有不同的獨立位置。 還要看看您是否在兩個地方之間的任何地方都使用了LOAD_PATH。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM