RailsEngines 2.3

Les problèmes avec rails 2.3 continuent.

J’utilise depuis longtemps le plugin rails-engines qui permet de transformer une application en un plugin.

Et nouveauté de la version 2.3 de rails, RailsEngine y a été incorporé. Mais comme certains plugins qui ont été incorporé (has_finder, globalize, …) à chaque fois ce n’est pas complètement, bref il faut quand compléter les fonctionnalités en installant le plugin engine expurgé du code commun avec rails.

Mais bon ça bug encore, on obtient un :

A copy of X has been removed from the module tree but is still active!

ou bien un

can’t dup NilClass

uniquement en mode dev … grrr

Alors heureusement, d’autres sont passé par là et certains ont déjà résolu le problème en ajoutant un unloadable dans la classe concernée

class Toto
  unloadable
end

That’s it !

UPDATE :

En lisant les commentaires en fait ce n’est pas la bonne solution. En fait il faut lire la doc, enfin la doc dans le code 🙂 dans railties/lib/initializer.rb :

    # Enables or disables plugin reloading.  You can get around this setting per plugin.
    # If reload_plugins? is false, add this to your plugin's init.rb
    # to make it reloadable:
    #
    #   ActiveSupport::Dependencies.load_once_paths.delete lib_path
    #
    # If reload_plugins? is true, add this to your plugin's init.rb
    # to only load it once:
    #
    #   ActiveSupport::Dependencies.load_once_paths << lib_path
    #

C’est clair ! soit d’office vous ne voulez pas du tout recharger les plugins (reload_plugin à false), et seulement certains (ceux que vous développez par exemple) alors il faut mettre dans le init.rb :

# config/environments/development.rb
config.reload_plugins = false

# plugin's init.rb : remove plugin from unloadable list
ActiveSupport::Dependencies.load_once_paths -= load_paths

soit l’inverse vous voulez que tous les modules soient rechargeable (reload_plugins à true), sauf certains :

# config/environments/development.rb
config.reload_plugins = true

# plugin's init.rb : add plugin in unloadable list
ActiveSupport::Dependencies.load_once_paths += load_paths
Ce contenu a été publié dans Non classé. Vous pouvez le mettre en favoris avec ce permalien.