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.

Ce contenu a été publié dans Rails, Web Dev. Vous pouvez le mettre en favoris avec ce permalien.