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

Popular posts from this blog

1111. appearing after print sequence - php -

java - WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/board/] in DispatcherServlet with name 'appServlet' -

Ruby on Rails, ActiveRecord, Postgres, UTF-8 and ASCII-8BIT encodings -