ActionController::RoutingError(没有路线匹配 [GET])亚马逊 EC2 生产

ActionController::RoutingError (No route matches [GET]) on amazon EC2 production

我已经使用 nginx 和 passenger 在 amazon ec2 实例上部署了我的应用程序,并且在我调用 api.subdomain.domain.com/admin 时它的工作正常并且它的工作非常完美,正如我想要的 运行。

但是当我调用 url api.subdomain.domain.com/v1/products 时,我遇到了以下错误。它在本地开发和生产模式上都能正常工作。只有 API 呼叫不工作。

我用过ruby 2.2.2rails 4.2.3

如果有人想了解有关此问题的更多详细信息,请告诉我。

ActionController::RoutingError (No route matches [GET] "/v1/products"):
App 7773 stdout:   actionpack (4.2.3) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
App 7773 stdout:   actionpack (4.2.3) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
App 7773 stdout:   railties (4.2.3) lib/rails/rack/logger.rb:38:in `call_app'
App 7773 stdout:   railties (4.2.3) lib/rails/rack/logger.rb:20:in `block in call'
App 7773 stdout:   activesupport (4.2.3) lib/active_support/tagged_logging.rb:68:in `block in tagged'
App 7773 stdout:   activesupport (4.2.3) lib/active_support/tagged_logging.rb:26:in `tagged'
App 7773 stdout:   activesupport (4.2.3) lib/active_support/tagged_logging.rb:68:in `tagged'
App 7773 stdout:   railties (4.2.3) lib/rails/rack/logger.rb:20:in `call'
App 7773 stdout:   actionpack (4.2.3) lib/action_dispatch/middleware/request_id.rb:21:in `call'
App 7773 stdout:   rack (1.6.4) lib/rack/methodoverride.rb:22:in `call'
App 7773 stdout:   rack (1.6.4) lib/rack/runtime.rb:18:in `call'
App 7773 stdout:   activesupport (4.2.3) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
App 7773 stdout:   actionpack (4.2.3) lib/action_dispatch/middleware/static.rb:116:in `call'
App 7773 stdout:   rack (1.6.4) lib/rack/sendfile.rb:113:in `call'
App 7773 stdout:   railties (4.2.3) lib/rails/engine.rb:518:in `call'
App 7773 stdout:   railties (4.2.3) lib/rails/application.rb:165:in `call'
App 7773 stdout:   /usr/lib/ruby/vendor_ruby/phusion_passenger/rack/thread_handler_extension.rb:97:in `process_request'
App 7773 stdout:   /usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler/thread_handler.rb:152:in `accept_and_process_next_request'
App 7773 stdout:   /usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler/thread_handler.rb:113:in `main_loop'
App 7773 stdout:   /usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler.rb:416:in `block (3 levels) in start_threads'
App 7773 stdout:   /usr/lib/ruby/vendor_ruby/phusion_passenger/utils.rb:113:in `block in create_thread_and_abort_on_exception'
App 7773 stdout: 

我的 routes.rb 文件:

Rails.application.routes.draw do
  devise_for :admin_users, ActiveAdmin::Devise.config
  ActiveAdmin.routes(self)

  constraints :subdomain => 'api' do
    namespace :api, path: nil, defaults: {format: 'json'} do
      namespace :v1 do
        get "/products" => "products#all_details"
      end

      namespace :v2 do
        get "/products" => "products#all_details"
      end
    end
  end
end

当我做rake路线时,我得到了这条路线

api_v1_products GET        /v1/products(.:format)                    api/v1/products#all_details {:subdomain=>"api", :format=>"json"}

我已经找到解决办法了。这里的问题是针对子域的。在这里我确实有 2 个子域和 rails 默认情况下将 1 设置为 TLD(Top Level Domain)。我将它增加了 2,它对我有用。

此处设置 2 作为值,我在 production.rb

上添加了以下配置
config.action_dispatch.tld_length = 2

注意:实际上 TLD 不用于前子域,但它对我有用,所以我在这里给出了解决方案。它用于 .com、.co.in..