Divers problèmes avec Rails 2.2+
Ah les joies de se mettre à jour et son code à l’occasion … Oui depuis longtemps je trainais avec rails 1.2.6 (oui je sais ça commence à dater mais j’ai mes raisons). Il me tardait donc de pouvoir utiliser les nouvelles versions de rails avec son lots d’améliorations.
Bon tout d’abord grosse surprise un bug uniquement présent en development, et pour cause il concerne le système de déchargement/rechargement du code de l’application.
ça donne soit un
stack level too deep
ou alors un pénible
vendor/rails/activerecord/lib/active_record/attribute_methods.rb:142:in `create_time_zone_conversion_attribute?' vendor/rails/activerecord/lib/active_record/attribute_methods.rb:75:in `define_attribute_methods' vendor/rails/activerecord/lib/active_record/attribute_methods.rb:71:in `each' vendor/rails/activerecord/lib/active_record/attribute_methods.rb:71:in `define_attribute_methods' vendor/rails/activerecord/lib/active_record/attribute_methods.rb:242:in `method_missing'
Le problème semble être valable depuis rails 2.2 et toujours pas corrigé. Il semble que ce ne soit pas une priorité car le problème se pose uniquement en mode development.
Donc la solution est de patcher rails en attendant. Patch qui se trouve dans le ticket chez lighthouseapp :
if ENV['RAILS_ENV'] != 'production'
class ActiveRecord::Base
class_eval do
def self.reset_subclasses
nonreloadables = []
subclasses.each do |klass|
unless ActiveSupport::Dependencies.autoloaded? klass
nonreloadables << klass
next
end
klass.instance_variables.each { |var| klass.send(:remove_instance_variable, var) }
klass.instance_methods(false).each { |m| klass.send(:undef_method, m) unless m =~ /^id(=$|\?$|$)/ }
end
@@subclasses = {}
nonreloadables.each { |klass| (@@subclasses[klass.superclass] ||= []) << klass }
end
end
end
end
Voilà et maintenant ça roule on peut développer en paix.
Laissez un commentaire