Mountable engine routing error in Rails 4 after upgrade from Rails 3 -
i'm having trouble mountable engines within our rails 4.2.4 app. (i know, it's sad how late game) upgrade rails 3.2.23. our engine routes worked fine in rails 3.2.23, when try visit routes (using paw or curl), routingerror, no route matches. however, when @ output of rake routes or http://localhost:3000/rails/info/routes route in fact exist right verb , everything.
things looked into:
- the route isn't overwritten else down file, because have wrapped in subdomain constraints.
- i've recreated mountable engine, using latest version of rails , compared differences.
also, i'm using versionist gem. don't know if that's what's causing or not, seems relevant.
gemfile
gem 'api', path: 'engines/api' config/routes.rb
constraints subdomain: /^api/, format: :json mount api::engine, at: "/" end engines/api/lib/api/engine.rb
module api class engine < ::rails::engine isolate_namespace api config.generators |g| g.template_engine :rabl g.test_framework :rspec, view_specs: false end end end engines/api/config/routes.rb
api::engine.routes.draw api_version(:module => "v1", :parameter => { :name => "version", :value => "1" }) resources :users end end sample curl request
curl -x "get" "http://api.myapp.dev:3000/users/new?api_key=foobar&version=1" \ -h "accept: application/json" \ -h "content-type: application/json" log/development.log
actioncontroller::routingerror (no route matches [get] "/users/new"): actionpack (4.2.4) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call' rollbar (2.3.0) lib/rollbar/middleware/rails/show_exceptions.rb:22:in `call_with_rollbar' newrelic_rpm (3.13.2.302) lib/new_relic/agent/instrumentation/middleware_tracing.rb:67:in `call' web-console (2.2.1) lib/web_console/middleware.rb:39:in `call' newrelic_rpm (3.13.2.302) lib/new_relic/agent/instrumentation/middleware_tracing.rb:67:in `call' actionpack (4.2.4) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call' newrelic_rpm (3.13.2.302) lib/new_relic/agent/instrumentation/middleware_tracing.rb:67:in `call' railties (4.2.4) lib/rails/rack/logger.rb:38:in `call_app' railties (4.2.4) lib/rails/rack/logger.rb:20:in `block in call' activesupport (4.2.4) lib/active_support/tagged_logging.rb:68:in `block in tagged' activesupport (4.2.4) lib/active_support/tagged_logging.rb:26:in `tagged' activesupport (4.2.4) lib/active_support/tagged_logging.rb:68:in `tagged' railties (4.2.4) lib/rails/rack/logger.rb:20:in `call' quiet_assets (1.1.0) lib/quiet_assets.rb:27:in `call_with_quiet_assets' newrelic_rpm (3.13.2.302) lib/new_relic/agent/instrumentation/middleware_tracing.rb:67:in `call' request_store (1.2.0) lib/request_store/middleware.rb:8:in `call' newrelic_rpm (3.13.2.302) lib/new_relic/agent/instrumentation/middleware_tracing.rb:67:in `call' actionpack (4.2.4) lib/action_dispatch/middleware/request_id.rb:21:in `call' newrelic_rpm (3.13.2.302) lib/new_relic/agent/instrumentation/middleware_tracing.rb:67:in `call' rack (1.6.4) lib/rack/methodoverride.rb:22:in `call' newrelic_rpm (3.13.2.302) lib/new_relic/agent/instrumentation/middleware_tracing.rb:67:in `call' rack (1.6.4) lib/rack/runtime.rb:18:in `call' newrelic_rpm (3.13.2.302) lib/new_relic/agent/instrumentation/middleware_tracing.rb:67:in `call' activesupport (4.2.4) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call' newrelic_rpm (3.13.2.302) lib/new_relic/agent/instrumentation/middleware_tracing.rb:67:in `call' rack (1.6.4) lib/rack/lock.rb:17:in `call' newrelic_rpm (3.13.2.302) lib/new_relic/agent/instrumentation/middleware_tracing.rb:67:in `call' rack (1.6.4) lib/rack/sendfile.rb:113:in `call' newrelic_rpm (3.13.2.302) lib/new_relic/agent/instrumentation/middleware_tracing.rb:67:in `call' railties (4.2.4) lib/rails/engine.rb:518:in `call' railties (4.2.4) lib/rails/application.rb:165:in `call' railties (4.2.4) lib/rails/railtie.rb:194:in `public_send' railties (4.2.4) lib/rails/railtie.rb:194:in `method_missing' newrelic_rpm (3.13.2.302) lib/new_relic/agent/instrumentation/middleware_tracing.rb:67:in `call' passenger (5.0.20) src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb:94:in `process_request' passenger (5.0.20) src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb:151:in `accept_and_process_next_request' passenger (5.0.20) src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb:112:in `main_loop' passenger (5.0.20) src/ruby_supportlib/phusion_passenger/request_handler.rb:415:in `block (3 levels) in start_threads' passenger (5.0.20) src/ruby_supportlib/phusion_passenger/utils.rb:112:in `block in create_thread_and_abort_on_exception'
so figured out answer, ever subtle change in syntax accepted in constraints. ended removing format constraint above mount call , moved engine routes. code looks this:
config/routes.rb
mount api::engine, at: '/', constraints: { subdomain: /^api/ } engines/api/config/routes.rb
api::engine.routes.draw api_version(module: "v1", parameter: { name: "version", value: "1" }) constraints format: :json # added format constraint here. resources :users end end end hope helps took me while nail down problem.
Comments
Post a Comment