support rodillera rails concerns active ruby-on-rails activesupport

ruby on rails - rodillera - No se pueden definir varios bloques ''incluidos'' para una Preocupación(ActiveSupport:: Concern:: MultipleIncludedBlocks) con cache_classes=true



concerns ruby on rails (2)

Para cualquier persona que golpee el mismo muro para leer, la solución a esto es respetar estrictamente las reglas de carga automática de Rails. Es decir

  1. Eliminando todo el require / require_relative
  2. Agregue las rutas necesarias a las rutas de carga automática de Rails
  3. Coloque los archivos en los lugares correctos con los nombres correctos para que Rails pueda inferir dónde buscar el código para cargar.

Más información aquí: https://github.com/rails/rails/issues/15767

Tengo un módulo determinado que se utiliza en una aplicación Rails 4.1.1

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

que está incluido en una clase

class Some include A end

Esto funciona muy bien con cache_classes=true en application.rb . Ahora, si desactivo el almacenamiento en caché de clases, no Cannot define multiple ''included'' blocks for a Concern (ActiveSupport::Concern::MultipleIncludedBlocks) inicia el servidor.

¿Cómo debería uno lidiar con un problema de este tipo ya que Rails realiza la recarga de las clases?


También es posible que tenga dos preocupaciones con el mismo nombre.

En mi caso, me enfrenté a este error mientras corría los 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

Desde que tenía dos archivos swagger con el mismo nombre.

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

Cambié el nombre de segundo archivo como:

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