Impossible de définir plusieurs blocs' included ' pour un problème (ActiveSupport:: Concern:: MultipleIncludedBlocks) avec les classes de cache = true

j'ai un module qui est utilisé dans les Rails 4.1.1 application

module A
   extend ActiveSupport::Concern
   included do
     #Some code
   end
end

qui est inclus dans une classe

class Some
  include A
end

Cela fonctionne très bien avec cache_classes=trueapplication.rb. Maintenant, si j'éteins la mise en cache des classes, j'obtiens Cannot define multiple 'included' blocks for a Concern (ActiveSupport::Concern::MultipleIncludedBlocks) exception upson démarrage du serveur.

Comment traiter un tel problème puisque le rechargement des classes se fait par des Rails?

27
demandé sur muichkine 2014-06-16 17:08:49

2 réponses

pour quiconque frappe le même mur pour lire, la solution est de respecter strictement les règles D'autoloading des Rails.

  1. supprimer tout le require / require_relative
  2. ajouter les chemins nécessaires aux Rails chemins autoload
  3. placez les fichiers aux bons endroits avec les bons noms pour que les Rails puissent inférer où chercher le code à charger.

Plus d'infos ici: https://github.com/rails/rails/issues/15767

45
répondu muichkine 2014-06-30 09:09:19

il est aussi possible que vous ayez deux préoccupations avec le même nom.

dans mon cas j'ai affronté cette erreur en exécutant rails swagger:docs SD_LOG_LEVEL=1 .

$ rails swagger:docs SD_LOG_LEVEL=1

Cannot define multiple 'included' blocks for a Concern
1.0: 19 processed / 49 skipped

depuis que j'ai deux fichiers swagger avec le même nom.

module SwaggerDocs::TrackerPhases
  extend ActiveSupport::Concern
  included do
  end
end

module SwaggerDocs::TrackerPhases
  extend ActiveSupport::Concern
  included do
  end
end

j'ai renommé deuxième fichier:

module SwaggerDocs::ClientTrackerPhases
  extend ActiveSupport::Concern
  included do
  end
end 
0
répondu Mayuresh Srivastava 2018-09-22 18:58:14