Skip to content

GraphQL duplicate type definition issue during code reload (development environment) #4202

@ahukkanen

Description

@ahukkanen

Describe the bug
The GraphQL API is causing the following exception being thrown breaking the comments component when code reloading happens:

Exception: RuntimeError (Duplicate type definition found for name 'CommentableInterface' at 'Interface on Comment' (CommentableInterface, CommentableInterface))

This issue only exists in development environment where the Decidim classes are being reloaded after code changes happen on the application level.

To Reproduce
Steps to reproduce the behavior:

  1. Clone the master branch
  2. Create the dummy development app (and seed it)
  3. Start the dummy development app server
  4. Load any component that has commenting enabled
  5. See that the comments are loaded properly
  6. Open any file in the app folder of the dummy development app (e.g. app/controllers/application_controller.rb)
  7. Make a change to that file (e.g. add new line) and save it
  8. Reload the page you had open in the browser with the comments visible
  9. See that the comments are no longer loaded properly
  10. See the exception and stack trace appear in the development console

Expected behavior
I would expect the comments to be correctly loaded and continue to work during development.

Screenshots
decidim-bug-comments

Stacktrace

Exception: RuntimeError (Duplicate type definition found... [click for more]

RuntimeError (Duplicate type definition found for name 'CommentableInterface' at 'Interface on Comment' (CommentableInterface, CommentableInterface)):

graphql (1.8.8) lib/graphql/schema/traversal.rb:168:in `visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:142:in `block in visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:142:in `each'
graphql (1.8.8) lib/graphql/schema/traversal.rb:142:in `visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:205:in `visit_field_on_type'
graphql (1.8.8) lib/graphql/schema/traversal.rb:185:in `block in visit_fields'
graphql (1.8.8) lib/graphql/schema/traversal.rb:184:in `each'
graphql (1.8.8) lib/graphql/schema/traversal.rb:184:in `visit_fields'
graphql (1.8.8) lib/graphql/schema/traversal.rb:145:in `visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:142:in `block in visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:142:in `each'
graphql (1.8.8) lib/graphql/schema/traversal.rb:142:in `visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:205:in `visit_field_on_type'
graphql (1.8.8) lib/graphql/schema/traversal.rb:185:in `block in visit_fields'
graphql (1.8.8) lib/graphql/schema/traversal.rb:184:in `each'
graphql (1.8.8) lib/graphql/schema/traversal.rb:184:in `visit_fields'
graphql (1.8.8) lib/graphql/schema/traversal.rb:143:in `visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:205:in `visit_field_on_type'
graphql (1.8.8) lib/graphql/schema/traversal.rb:185:in `block in visit_fields'
graphql (1.8.8) lib/graphql/schema/traversal.rb:184:in `each'
graphql (1.8.8) lib/graphql/schema/traversal.rb:184:in `visit_fields'
graphql (1.8.8) lib/graphql/schema/traversal.rb:143:in `visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:205:in `visit_field_on_type'
graphql (1.8.8) lib/graphql/schema/traversal.rb:185:in `block in visit_fields'
graphql (1.8.8) lib/graphql/schema/traversal.rb:184:in `each'
graphql (1.8.8) lib/graphql/schema/traversal.rb:184:in `visit_fields'
graphql (1.8.8) lib/graphql/schema/traversal.rb:143:in `visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:124:in `block in visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:124:in `each'
graphql (1.8.8) lib/graphql/schema/traversal.rb:124:in `visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:43:in `initialize'
graphql (1.8.8) lib/graphql/schema.rb:1037:in `new'
graphql (1.8.8) lib/graphql/schema.rb:1037:in `rebuild_artifacts'
graphql (1.8.8) lib/graphql/schema.rb:272:in `types'
graphql (1.8.8) lib/graphql/schema/validation.rb:134:in `block in <module:Rules>'
graphql (1.8.8) lib/graphql/schema/validation.rb:19:in `block in validate'
graphql (1.8.8) lib/graphql/schema/validation.rb:19:in `each'
graphql (1.8.8) lib/graphql/schema/validation.rb:19:in `reduce'
graphql (1.8.8) lib/graphql/schema/validation.rb:19:in `validate'
graphql (1.8.8) lib/graphql/schema.rb:233:in `define'
graphql (1.8.8) lib/graphql/define/instance_definable.rb:228:in `define'
/path/to/decidim/decidim-api/app/types/decidim/api/schema.rb:6:in `<module:Api>'
/path/to/decidim/decidim-api/app/types/decidim/api/schema.rb:4:in `<module:Decidim>'
/path/to/decidim/decidim-api/app/types/decidim/api/schema.rb:3:in `<main>'
bootsnap (1.3.0) lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:100:in `load'
bootsnap (1.3.0) lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:100:in `load'
activesupport (5.2.1) lib/active_support/dependencies.rb:472:in `block in load_file'
activesupport (5.2.1) lib/active_support/dependencies.rb:657:in `new_constants_in'
activesupport (5.2.1) lib/active_support/dependencies.rb:471:in `load_file'
activesupport (5.2.1) lib/active_support/dependencies.rb:369:in `block in require_or_load'
activesupport (5.2.1) lib/active_support/dependencies.rb:37:in `block in load_interlock'
activesupport (5.2.1) lib/active_support/dependencies/interlock.rb:14:in `block in loading'
activesupport (5.2.1) lib/active_support/concurrency/share_lock.rb:151:in `exclusive'
activesupport (5.2.1) lib/active_support/dependencies/interlock.rb:13:in `loading'
activesupport (5.2.1) lib/active_support/dependencies.rb:37:in `load_interlock'
activesupport (5.2.1) lib/active_support/dependencies.rb:352:in `require_or_load'
activesupport (5.2.1) lib/active_support/dependencies.rb:506:in `load_missing_constant'
bootsnap (1.3.0) lib/bootsnap/load_path_cache/core_ext/active_support.rb:43:in `load_missing_constant'
activesupport (5.2.1) lib/active_support/dependencies.rb:193:in `const_missing'
activesupport (5.2.1) lib/active_support/dependencies.rb:538:in `load_missing_constant'
bootsnap (1.3.0) lib/bootsnap/load_path_cache/core_ext/active_support.rb:43:in `load_missing_constant'
activesupport (5.2.1) lib/active_support/dependencies.rb:193:in `const_missing'
/path/to/decidim/decidim-api/app/controllers/decidim/api/queries_controller.rb:11:in `create'
actionpack (5.2.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (5.2.1) lib/abstract_controller/base.rb:194:in `process_action'
actionpack (5.2.1) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (5.2.1) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport (5.2.1) lib/active_support/callbacks.rb:132:in `run_callbacks'
actionpack (5.2.1) lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack (5.2.1) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (5.2.1) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
activesupport (5.2.1) lib/active_support/notifications.rb:168:in `block in instrument'
activesupport (5.2.1) lib/active_support/notifications/instrumenter.rb:23:in `instrument'
activesupport (5.2.1) lib/active_support/notifications.rb:168:in `instrument'
actionpack (5.2.1) lib/action_controller/metal/instrumentation.rb:32:in `process_action'
actionpack (5.2.1) lib/action_controller/metal/params_wrapper.rb:256:in `process_action'
activerecord (5.2.1) lib/active_record/railties/controller_runtime.rb:24:in `process_action'
actionpack (5.2.1) lib/abstract_controller/base.rb:134:in `process'
actionview (5.2.1) lib/action_view/rendering.rb:32:in `process'
actionpack (5.2.1) lib/action_controller/metal.rb:191:in `dispatch'
actionpack (5.2.1) lib/action_controller/metal.rb:252:in `dispatch'
actionpack (5.2.1) lib/action_dispatch/routing/route_set.rb:52:in `dispatch'
actionpack (5.2.1) lib/action_dispatch/routing/route_set.rb:34:in `serve'
actionpack (5.2.1) lib/action_dispatch/journey/router.rb:52:in `block in serve'
actionpack (5.2.1) lib/action_dispatch/journey/router.rb:35:in `each'
actionpack (5.2.1) lib/action_dispatch/journey/router.rb:35:in `serve'
actionpack (5.2.1) lib/action_dispatch/routing/route_set.rb:840:in `call'
railties (5.2.1) lib/rails/engine.rb:524:in `call'
railties (5.2.1) lib/rails/railtie.rb:190:in `public_send'
railties (5.2.1) lib/rails/railtie.rb:190:in `method_missing'
actionpack (5.2.1) lib/action_dispatch/routing/mapper.rb:19:in `block in <class:Constraints>'
actionpack (5.2.1) lib/action_dispatch/routing/mapper.rb:48:in `serve'
actionpack (5.2.1) lib/action_dispatch/journey/router.rb:52:in `block in serve'
actionpack (5.2.1) lib/action_dispatch/journey/router.rb:35:in `each'
actionpack (5.2.1) lib/action_dispatch/journey/router.rb:35:in `serve'
actionpack (5.2.1) lib/action_dispatch/routing/route_set.rb:840:in `call'
railties (5.2.1) lib/rails/engine.rb:524:in `call'
railties (5.2.1) lib/rails/railtie.rb:190:in `public_send'
railties (5.2.1) lib/rails/railtie.rb:190:in `method_missing'
actionpack (5.2.1) lib/action_dispatch/routing/mapper.rb:19:in `block in <class:Constraints>'
actionpack (5.2.1) lib/action_dispatch/routing/mapper.rb:48:in `serve'
actionpack (5.2.1) lib/action_dispatch/journey/router.rb:52:in `block in serve'
actionpack (5.2.1) lib/action_dispatch/journey/router.rb:35:in `each'
actionpack (5.2.1) lib/action_dispatch/journey/router.rb:35:in `serve'
actionpack (5.2.1) lib/action_dispatch/routing/route_set.rb:840:in `call'
/path/to/decidim/decidim-core/app/middleware/decidim/current_organization.rb:21:in `call'
omniauth (1.8.1) lib/omniauth/strategy.rb:190:in `call!'
omniauth (1.8.1) lib/omniauth/strategy.rb:168:in `call'
warden (1.2.7) lib/warden/manager.rb:36:in `block in call'
warden (1.2.7) lib/warden/manager.rb:35:in `catch'
warden (1.2.7) lib/warden/manager.rb:35:in `call'
rack (2.0.5) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.0.5) lib/rack/etag.rb:25:in `call'
rack (2.0.5) lib/rack/conditional_get.rb:38:in `call'
rack (2.0.5) lib/rack/head.rb:12:in `call'
actionpack (5.2.1) lib/action_dispatch/http/content_security_policy.rb:18:in `call'
rack (2.0.5) lib/rack/session/abstract/id.rb:232:in `context'
rack (2.0.5) lib/rack/session/abstract/id.rb:226:in `call'
actionpack (5.2.1) lib/action_dispatch/middleware/cookies.rb:670:in `call'
activerecord (5.2.1) lib/active_record/migration.rb:559:in `call'
actionpack (5.2.1) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
activesupport (5.2.1) lib/active_support/callbacks.rb:98:in `run_callbacks'
actionpack (5.2.1) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (5.2.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (5.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:61:in `call'
web-console (3.6.2) lib/web_console/middleware.rb:135:in `call_app'
web-console (3.6.2) lib/web_console/middleware.rb:30:in `block in call'
web-console (3.6.2) lib/web_console/middleware.rb:20:in `catch'
web-console (3.6.2) lib/web_console/middleware.rb:20:in `call'
actionpack (5.2.1) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
railties (5.2.1) lib/rails/rack/logger.rb:38:in `call_app'
railties (5.2.1) lib/rails/rack/logger.rb:26:in `block in call'
activesupport (5.2.1) lib/active_support/tagged_logging.rb:71:in `block in tagged'
activesupport (5.2.1) lib/active_support/tagged_logging.rb:28:in `tagged'
activesupport (5.2.1) lib/active_support/tagged_logging.rb:71:in `tagged'
railties (5.2.1) lib/rails/rack/logger.rb:26:in `call'
sprockets-rails (3.2.1) lib/sprockets/rails/quiet_assets.rb:13:in `call'
actionpack (5.2.1) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
request_store (1.4.1) lib/request_store/middleware.rb:19:in `call'
actionpack (5.2.1) lib/action_dispatch/middleware/request_id.rb:27:in `call'
rack (2.0.5) lib/rack/method_override.rb:22:in `call'
rack (2.0.5) lib/rack/runtime.rb:22:in `call'
activesupport (5.2.1) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
actionpack (5.2.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (5.2.1) lib/action_dispatch/middleware/static.rb:127:in `call'
rack (2.0.5) lib/rack/sendfile.rb:111:in `call'
rack-cors (1.0.2) lib/rack/cors.rb:97:in `call'
railties (5.2.1) lib/rails/engine.rb:524:in `call'
puma (3.11.4) lib/puma/configuration.rb:225:in `call'
puma (3.11.4) lib/puma/server.rb:632:in `handle_request'
puma (3.11.4) lib/puma/server.rb:446:in `process_client'
puma (3.11.4) lib/puma/server.rb:306:in `block in run'
puma (3.11.4) lib/puma/thread_pool.rb:120:in `block in spawn_thread'
graphql (1.8.8) lib/graphql/schema/traversal.rb:168:in `visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:142:in `block in visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:142:in `each'
graphql (1.8.8) lib/graphql/schema/traversal.rb:142:in `visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:205:in `visit_field_on_type'
graphql (1.8.8) lib/graphql/schema/traversal.rb:185:in `block in visit_fields'
graphql (1.8.8) lib/graphql/schema/traversal.rb:184:in `each'
graphql (1.8.8) lib/graphql/schema/traversal.rb:184:in `visit_fields'
graphql (1.8.8) lib/graphql/schema/traversal.rb:145:in `visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:142:in `block in visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:142:in `each'
graphql (1.8.8) lib/graphql/schema/traversal.rb:142:in `visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:205:in `visit_field_on_type'
graphql (1.8.8) lib/graphql/schema/traversal.rb:185:in `block in visit_fields'
graphql (1.8.8) lib/graphql/schema/traversal.rb:184:in `each'
graphql (1.8.8) lib/graphql/schema/traversal.rb:184:in `visit_fields'
graphql (1.8.8) lib/graphql/schema/traversal.rb:143:in `visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:205:in `visit_field_on_type'
graphql (1.8.8) lib/graphql/schema/traversal.rb:185:in `block in visit_fields'
graphql (1.8.8) lib/graphql/schema/traversal.rb:184:in `each'
graphql (1.8.8) lib/graphql/schema/traversal.rb:184:in `visit_fields'
graphql (1.8.8) lib/graphql/schema/traversal.rb:143:in `visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:205:in `visit_field_on_type'
graphql (1.8.8) lib/graphql/schema/traversal.rb:185:in `block in visit_fields'
graphql (1.8.8) lib/graphql/schema/traversal.rb:184:in `each'
graphql (1.8.8) lib/graphql/schema/traversal.rb:184:in `visit_fields'
graphql (1.8.8) lib/graphql/schema/traversal.rb:143:in `visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:124:in `block in visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:124:in `each'
graphql (1.8.8) lib/graphql/schema/traversal.rb:124:in `visit'
graphql (1.8.8) lib/graphql/schema/traversal.rb:43:in `initialize'
graphql (1.8.8) lib/graphql/schema.rb:1037:in `new'
graphql (1.8.8) lib/graphql/schema.rb:1037:in `rebuild_artifacts'
graphql (1.8.8) lib/graphql/schema.rb:272:in `types'
graphql (1.8.8) lib/graphql/schema/validation.rb:134:in `block in <module:Rules>'
graphql (1.8.8) lib/graphql/schema/validation.rb:19:in `block in validate'
graphql (1.8.8) lib/graphql/schema/validation.rb:19:in `each'
graphql (1.8.8) lib/graphql/schema/validation.rb:19:in `reduce'
graphql (1.8.8) lib/graphql/schema/validation.rb:19:in `validate'
graphql (1.8.8) lib/graphql/schema.rb:233:in `define'
graphql (1.8.8) lib/graphql/define/instance_definable.rb:228:in `define'
/path/to/decidim/decidim-api/app/types/decidim/api/schema.rb:6:in `<module:Api>'
/path/to/decidim/decidim-api/app/types/decidim/api/schema.rb:4:in `<module:Decidim>'
/path/to/decidim/decidim-api/app/types/decidim/api/schema.rb:3:in `<main>'
bootsnap (1.3.0) lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:100:in `load'
bootsnap (1.3.0) lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:100:in `load'
activesupport (5.2.1) lib/active_support/dependencies.rb:472:in `block in load_file'
activesupport (5.2.1) lib/active_support/dependencies.rb:657:in `new_constants_in'
activesupport (5.2.1) lib/active_support/dependencies.rb:471:in `load_file'
activesupport (5.2.1) lib/active_support/dependencies.rb:369:in `block in require_or_load'
activesupport (5.2.1) lib/active_support/dependencies.rb:37:in `block in load_interlock'
activesupport (5.2.1) lib/active_support/dependencies/interlock.rb:14:in `block in loading'
activesupport (5.2.1) lib/active_support/concurrency/share_lock.rb:151:in `exclusive'
activesupport (5.2.1) lib/active_support/dependencies/interlock.rb:13:in `loading'
activesupport (5.2.1) lib/active_support/dependencies.rb:37:in `load_interlock'
activesupport (5.2.1) lib/active_support/dependencies.rb:352:in `require_or_load'
activesupport (5.2.1) lib/active_support/dependencies.rb:506:in `load_missing_constant'
bootsnap (1.3.0) lib/bootsnap/load_path_cache/core_ext/active_support.rb:43:in `load_missing_constant'
activesupport (5.2.1) lib/active_support/dependencies.rb:193:in `const_missing'
activesupport (5.2.1) lib/active_support/dependencies.rb:538:in `load_missing_constant'
bootsnap (1.3.0) lib/bootsnap/load_path_cache/core_ext/active_support.rb:43:in `load_missing_constant'
activesupport (5.2.1) lib/active_support/dependencies.rb:193:in `const_missing'
/path/to/decidim/decidim-api/app/controllers/decidim/api/queries_controller.rb:11:in `create'
actionpack (5.2.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (5.2.1) lib/abstract_controller/base.rb:194:in `process_action'
actionpack (5.2.1) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (5.2.1) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport (5.2.1) lib/active_support/callbacks.rb:132:in `run_callbacks'
actionpack (5.2.1) lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack (5.2.1) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (5.2.1) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
activesupport (5.2.1) lib/active_support/notifications.rb:168:in `block in instrument'
activesupport (5.2.1) lib/active_support/notifications/instrumenter.rb:23:in `instrument'
activesupport (5.2.1) lib/active_support/notifications.rb:168:in `instrument'
actionpack (5.2.1) lib/action_controller/metal/instrumentation.rb:32:in `process_action'
actionpack (5.2.1) lib/action_controller/metal/params_wrapper.rb:256:in `process_action'
activerecord (5.2.1) lib/active_record/railties/controller_runtime.rb:24:in `process_action'
actionpack (5.2.1) lib/abstract_controller/base.rb:134:in `process'
actionview (5.2.1) lib/action_view/rendering.rb:32:in `process'
actionpack (5.2.1) lib/action_controller/metal.rb:191:in `dispatch'
actionpack (5.2.1) lib/action_controller/metal.rb:252:in `dispatch'
actionpack (5.2.1) lib/action_dispatch/routing/route_set.rb:52:in `dispatch'
actionpack (5.2.1) lib/action_dispatch/routing/route_set.rb:34:in `serve'
actionpack (5.2.1) lib/action_dispatch/journey/router.rb:52:in `block in serve'
actionpack (5.2.1) lib/action_dispatch/journey/router.rb:35:in `each'
actionpack (5.2.1) lib/action_dispatch/journey/router.rb:35:in `serve'
actionpack (5.2.1) lib/action_dispatch/routing/route_set.rb:840:in `call'
railties (5.2.1) lib/rails/engine.rb:524:in `call'
railties (5.2.1) lib/rails/railtie.rb:190:in `public_send'
railties (5.2.1) lib/rails/railtie.rb:190:in `method_missing'
actionpack (5.2.1) lib/action_dispatch/routing/mapper.rb:19:in `block in <class:Constraints>'
actionpack (5.2.1) lib/action_dispatch/routing/mapper.rb:48:in `serve'
actionpack (5.2.1) lib/action_dispatch/journey/router.rb:52:in `block in serve'
actionpack (5.2.1) lib/action_dispatch/journey/router.rb:35:in `each'
actionpack (5.2.1) lib/action_dispatch/journey/router.rb:35:in `serve'
actionpack (5.2.1) lib/action_dispatch/routing/route_set.rb:840:in `call'
railties (5.2.1) lib/rails/engine.rb:524:in `call'
railties (5.2.1) lib/rails/railtie.rb:190:in `public_send'
railties (5.2.1) lib/rails/railtie.rb:190:in `method_missing'
actionpack (5.2.1) lib/action_dispatch/routing/mapper.rb:19:in `block in <class:Constraints>'
actionpack (5.2.1) lib/action_dispatch/routing/mapper.rb:48:in `serve'
actionpack (5.2.1) lib/action_dispatch/journey/router.rb:52:in `block in serve'
actionpack (5.2.1) lib/action_dispatch/journey/router.rb:35:in `each'
actionpack (5.2.1) lib/action_dispatch/journey/router.rb:35:in `serve'
actionpack (5.2.1) lib/action_dispatch/routing/route_set.rb:840:in `call'
/path/to/decidim/decidim-core/app/middleware/decidim/current_organization.rb:21:in `call'
omniauth (1.8.1) lib/omniauth/strategy.rb:190:in `call!'
omniauth (1.8.1) lib/omniauth/strategy.rb:168:in `call'
warden (1.2.7) lib/warden/manager.rb:36:in `block in call'
warden (1.2.7) lib/warden/manager.rb:35:in `catch'
warden (1.2.7) lib/warden/manager.rb:35:in `call'
rack (2.0.5) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.0.5) lib/rack/etag.rb:25:in `call'
rack (2.0.5) lib/rack/conditional_get.rb:38:in `call'
rack (2.0.5) lib/rack/head.rb:12:in `call'
actionpack (5.2.1) lib/action_dispatch/http/content_security_policy.rb:18:in `call'
rack (2.0.5) lib/rack/session/abstract/id.rb:232:in `context'
rack (2.0.5) lib/rack/session/abstract/id.rb:226:in `call'
actionpack (5.2.1) lib/action_dispatch/middleware/cookies.rb:670:in `call'
activerecord (5.2.1) lib/active_record/migration.rb:559:in `call'
actionpack (5.2.1) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
activesupport (5.2.1) lib/active_support/callbacks.rb:98:in `run_callbacks'
actionpack (5.2.1) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (5.2.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (5.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:61:in `call'
web-console (3.6.2) lib/web_console/middleware.rb:135:in `call_app'
web-console (3.6.2) lib/web_console/middleware.rb:30:in `block in call'
web-console (3.6.2) lib/web_console/middleware.rb:20:in `catch'
web-console (3.6.2) lib/web_console/middleware.rb:20:in `call'
actionpack (5.2.1) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
railties (5.2.1) lib/rails/rack/logger.rb:38:in `call_app'
railties (5.2.1) lib/rails/rack/logger.rb:26:in `block in call'
activesupport (5.2.1) lib/active_support/tagged_logging.rb:71:in `block in tagged'
activesupport (5.2.1) lib/active_support/tagged_logging.rb:28:in `tagged'
activesupport (5.2.1) lib/active_support/tagged_logging.rb:71:in `tagged'
railties (5.2.1) lib/rails/rack/logger.rb:26:in `call'
sprockets-rails (3.2.1) lib/sprockets/rails/quiet_assets.rb:13:in `call'
actionpack (5.2.1) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
request_store (1.4.1) lib/request_store/middleware.rb:19:in `call'
actionpack (5.2.1) lib/action_dispatch/middleware/request_id.rb:27:in `call'
rack (2.0.5) lib/rack/method_override.rb:22:in `call'
rack (2.0.5) lib/rack/runtime.rb:22:in `call'
activesupport (5.2.1) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
actionpack (5.2.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (5.2.1) lib/action_dispatch/middleware/static.rb:127:in `call'
rack (2.0.5) lib/rack/sendfile.rb:111:in `call'
rack-cors (1.0.2) lib/rack/cors.rb:97:in `call'
railties (5.2.1) lib/rails/engine.rb:524:in `call'
puma (3.11.4) lib/puma/configuration.rb:225:in `call'
puma (3.11.4) lib/puma/server.rb:632:in `handle_request'
puma (3.11.4) lib/puma/server.rb:446:in `process_client'
puma (3.11.4) lib/puma/server.rb:306:in `block in run'
puma (3.11.4) lib/puma/thread_pool.rb:120:in `block in spawn_thread'

Extra data (please complete the following information):

  • Device: Any
  • Device OS: Ubuntu 18.04 (server backend)
  • Browser: Any
  • Decidim Version: current master branch
  • Decidim installation: any (during development)

Additional context
Related issues that I found regarding similar issues:

This is caused by Rails' constant reloading which removes the GraphQL schema definitions defined by the constants in Decidim, e.g. Decidim::Comments::CommentableType. However, the definitions are still stored internally in the graphql gem which causes this issue when Decidim is trying to redefine them.

The source of the problem can be found from the graphql gem on this line as shown in the stacktrace:

https://github.com/rmosolgo/graphql-ruby/blob/d63a0b2b56c28bd06c3d789bfd1311cedb6b5e07/lib/graphql/schema/traversal.rb#L168

Possible solution for this would be to move the GraphQL schema definitions out of the app folders in the Decidim gems.

Metadata

Metadata

Assignees

No one assigned

    Labels

    graphql-apiAffects the GraphQL API

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions