我需要在带有/浏览/的子uri下运行我的Rails应用程序。
这是我公司的根域WEBSITE.COM
我的应用程序的根域应该从https://WEBSITE.COM/browse开始
但是,如果我在路由文件中添加了No route matches,就会得到异常scope ENV['RAILS_RELATIVE_URL_ROOT'] do。
我该怎么做才能解决这个问题?
环境
routes.rb
scope ENV['RAILS_RELATIVE_URL_ROOT'] do
get 'browse/category_detail'
get '*path' => redirect('/')
endapplication.rb
class Application < Rails::Application
config.relative_url_root = ENV['RAILS_RELATIVE_URL_ROOT']
end生产日志错误
I, [2015-10-20T07:07:15.956058 #30522] INFO -- : Started GET "/" for 127.0.0.1 at 2015-10-20 07:07:15 +0000
F, [2015-10-20T07:07:15.957575 #30522] FATAL -- :
ActionController::RoutingError (No route matches [GET] "/"):nginx.conf
server {
listen 443;
server_name WEBSITE.COM;
location /browse {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://unix:/tmp/puma.broswe.sock:/;
}
}%#更新
存取日志
如果我移除路线上的scope ENV['RAILS_RELATIVE_URL_ROOT']。
一切看起来都很好,但是url助手会被打破,
那就是session_destroy_url将是https://WEBSITE.COM/session/destroy,而不是https://WEBSITE.COM/browse/session/destroy
当我试图访问https://WEBSITE.COM/browse时
I, [2015-10-22T00:14:18.847598 #22300] INFO -- : Started GET "/" for 127.0.0.1 at 2015-10-22 00:14:18 +0000
F, [2015-10-22T00:14:18.848971 #22300] FATAL -- :
ActionController::RoutingError (No route matches [GET] "/"):
actionpack (4.2.0) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
actionpack (4.2.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.2.0) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.2.0) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.2.0) lib/active_support/tagged_logging.rb:68:in `block in tagged'
activesupport (4.2.0) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (4.2.0) lib/active_support/tagged_logging.rb:68:in `tagged'
railties (4.2.0) lib/rails/rack/logger.rb:20:in `call'
actionpack (4.2.0) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.6.1) lib/rack/methodoverride.rb:22:in `call'
rack (1.6.1) lib/rack/runtime.rb:18:in `call'
activesupport (4.2.0) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
actionpack (4.2.0) lib/action_dispatch/middleware/static.rb:113:in `call'
rack (1.6.1) lib/rack/sendfile.rb:113:in `call'
dragonfly (0.9.15) lib/dragonfly/middleware.rb:13:in `call'
rack-cache (1.2) lib/rack/cache/context.rb:136:in `forward'
rack-cache (1.2) lib/rack/cache/context.rb:245:in `fetch'
rack-cache (1.2) lib/rack/cache/context.rb:185:in `lookup'
rack-cache (1.2) lib/rack/cache/context.rb:66:in `call!'
rack-cache (1.2) lib/rack/cache/context.rb:51:in `call'
railties (4.2.0) lib/rails/engine.rb:518:in `call'
railties (4.2.0) lib/rails/application.rb:164:in `call'
rack (1.6.1) lib/rack/urlmap.rb:66:in `block in call'
rack (1.6.1) lib/rack/urlmap.rb:50:in `each'
rack (1.6.1) lib/rack/urlmap.rb:50:in `call'
puma (2.11.3) lib/puma/configuration.rb:51:in `call'
puma (2.11.3) lib/puma/server.rb:507:in `handle_request'
puma (2.11.3) lib/puma/server.rb:375:in `process_client'
puma (2.11.3) lib/puma/server.rb:262:in `block in run'
puma (2.11.3) lib/puma/thread_pool.rb:104:in `call'
puma (2.11.3) lib/puma/thread_pool.rb:104:in `block in spawn_thread'当我试图访问https://WEBSITE.COM/browse/browse/1时
I, [2015-10-22T00:15:32.391853 #22300] INFO -- : Started GET "/browse/1" for 127.0.0.1 at 2015-10-22 00:15:32 +0000
F, [2015-10-22T00:15:32.393190 #22300] FATAL -- :
ActionController::RoutingError (No route matches [GET] "/1"):
actionpack (4.2.0) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
actionpack (4.2.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.2.0) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.2.0) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.2.0) lib/active_support/tagged_logging.rb:68:in `block in tagged'
activesupport (4.2.0) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (4.2.0) lib/active_support/tagged_logging.rb:68:in `tagged'
railties (4.2.0) lib/rails/rack/logger.rb:20:in `call'
actionpack (4.2.0) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.6.1) lib/rack/methodoverride.rb:22:in `call'
rack (1.6.1) lib/rack/runtime.rb:18:in `call'
activesupport (4.2.0) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
actionpack (4.2.0) lib/action_dispatch/middleware/static.rb:113:in `call'
rack (1.6.1) lib/rack/sendfile.rb:113:in `call'
dragonfly (0.9.15) lib/dragonfly/middleware.rb:13:in `call'
rack-cache (1.2) lib/rack/cache/context.rb:136:in `forward'
rack-cache (1.2) lib/rack/cache/context.rb:245:in `fetch'
rack-cache (1.2) lib/rack/cache/context.rb:185:in `lookup'
rack-cache (1.2) lib/rack/cache/context.rb:66:in `call!'
rack-cache (1.2) lib/rack/cache/context.rb:51:in `call'
railties (4.2.0) lib/rails/engine.rb:518:in `call'
railties (4.2.0) lib/rails/application.rb:164:in `call'
rack (1.6.1) lib/rack/urlmap.rb:66:in `block in call'
rack (1.6.1) lib/rack/urlmap.rb:50:in `each'
rack (1.6.1) lib/rack/urlmap.rb:50:in `call'
puma (2.11.3) lib/puma/configuration.rb:51:in `call'
puma (2.11.3) lib/puma/server.rb:507:in `handle_request'
puma (2.11.3) lib/puma/server.rb:375:in `process_client'
puma (2.11.3) lib/puma/server.rb:262:in `block in run'
puma (2.11.3) lib/puma/thread_pool.rb:104:in `call'
puma (2.11.3) lib/puma/thread_pool.rb:104:in `block in spawn_thread'Nginx测井
10.0.0.97 - - [25/Oct/2015:09:24:45 +0000] "GET /browse HTTP/1.1" 404 715 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36"
10.0.0.97 - - [25/Oct/2015:09:24:45 +0000] "GET /browse HTTP/1.1" 404 715 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36" 10.0.0.97 - - [25/Oct/2015:09:25:12 +0000] "GET /browse/123 HTTP/1.1" 404 715 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36"发布于 2015-10-27 05:04:52
…浏览/浏览/1
这是因为您用使用/browse的方式使nginx从$uri中剥离出proxy_redirect部件。
location /browse {
proxy_pass http://unix:/tmp/puma.broswe.sock:/;
}如果你的意图不是在上游的时候剥夺/browse,那么这就是你应该拥有的:
location /browse {
proxy_pass http://unix:/tmp/puma.broswe.sock:/browse;
}或者这个:
location /browse {
proxy_pass http://unix:/tmp/puma.broswe.sock:;
}是的,原版中额外的拖尾/是导致您在上游丢失/browse的麻烦所在。
https://stackoverflow.com/questions/33238556
复制相似问题