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=true
application.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?
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.
- supprimer tout le require / require_relative
- ajouter les chemins nécessaires aux Rails chemins autoload
- 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
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