2010-09-06 5 views
0

J'utilise une application Rails 3.0.0 sur Ruby 1.8.7-p174. Tout allait à merveille jusqu'à ce que j'essayé de faire quelques tests:Méthode non définie '>>' pour la classe 'Date' dans Rails 3 sur Ruby 1.8.7/1.9.2

/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 

Je pris un coup d'oeil dans cette classe de calculs, en notant que undef était appelé à :>>. Mais Ruby 1.8.7 Date s n'ont pas de méthode >>. Je me suis dit que je l'emballerais avec une condition: if respond_to?(:>>). Les choses se sont rompues plus loin:

/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' 

La deuxième trace de pile est Ruby 1.9.2. Je reçois la même erreur avec Ruby 1.9.2 sans mon respond_to? vérifier comme Ruby 1.8.7 avec elle.

J'ai commenté mes extensions Date dans lib. Cela se produit uniquement dans l'environnement de test.

Pensées?

Répondre

1

Donc ce n'est peut-être pas la réponse la plus utile, mais c'est tout ce que j'ai pu déterminer jusqu'ici.

Le fichier en question: activesupport-3.0.0/lib/support_active/core_ext/date/calculations.rb supprime les définitions de: >> comme vous l'avez vu. Si le fichier est requis deux fois, le deuxième chargement de ce fichier échouera car la méthode n'est plus définie sur la classe Date.

Alors pourquoi ce fichier est-il requis deux fois? Ce dont je ne suis vraiment pas sûr. J'ai vu que la protection contre cela peut être boguée (si vous l'appelez un bogue, cela peut être une limitation) quand vous spécifiez le fichier avec un chemin complet une fois et une autre fois vous dépendez du LOAD_PATH ayant le dossier correct dedans pour vous trouver le fichier de cette façon. Je regarderais à travers votre code et voir ce qui nécessite soit rails/all ou actifsupprt/railstie et j'espère que vous verrez deux endroits différents qui semblent légèrement différents. Voyez aussi si vous transportez LOAD_PATH n'importe où entre les deux endroits.

Questions connexes