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.2
和rails 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..
我已经使用 nginx 和 passenger 在 amazon ec2 实例上部署了我的应用程序,并且在我调用 api.subdomain.domain.com/admin
时它的工作正常并且它的工作非常完美,正如我想要的 运行。
但是当我调用 url api.subdomain.domain.com/v1/products
时,我遇到了以下错误。它在本地开发和生产模式上都能正常工作。只有 API 呼叫不工作。
我用过ruby 2.2.2
和rails 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..