I have a certain module which is used in a Rails 4.1.1 application
module A
extend ActiveSupport::Concern
included do
#Some code
end
end
which is included in a class
class Some
include A
end
This works great with cache_classes=true
in application.rb
. Now, if I turn off the caching of classes, I get Cannot define multiple 'included' blocks for a Concern (ActiveSupport::Concern::MultipleIncludedBlocks)
exception upson starting the server.
How should one deal with such an issue since reloading the classes is done by Rails?
For anyone hitting the same wall to read, the solution to this is to strictly respect Rails autoloading rules. That is
- Removing all the require / require_relative
- Add needed paths to Rails autoload paths
- Put files at the right places with the right names so Rails can infer where to look for code to load.
More info here: https://github.com/rails/rails/issues/15767
It's also possible that you have two concerns with same name.
In my case I faced this error while running 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
Since I had two swagger files with same name.
module SwaggerDocs::TrackerPhases
extend ActiveSupport::Concern
included do
end
end
module SwaggerDocs::TrackerPhases
extend ActiveSupport::Concern
included do
end
end
I renamed second file as:
module SwaggerDocs::ClientTrackerPhases
extend ActiveSupport::Concern
included do
end
end
来源:https://stackoverflow.com/questions/24244519/cannot-define-multiple-included-blocks-for-a-concern-activesupportconcern