我可以删除 Rails 应用程序中的默认根目录而不创建新根目录吗?
Can I remove the default root in a Rails application without creating a new one?
创建新的 Rails 应用程序时,默认情况下它将在 /
提供 "Welcome to Rails" 页面,除非您在 routes.rb
中指定替代 root
。
我的应用程序目前仅提供来自子路径(例如 /api/v1/
)的内容,因此访问 /
应该会导致 404。我该如何完成此操作?
如果您想呈现 404
响应,我可以想到两种方法。
首先,您可以路由到 Rack,然后 return 一个简单的 404
响应:
# config/routes.rb
root to: proc { [404, {}, ["Not found."]] }
其次,您可以采取明显的路线并将 root 指向 returns 404
:
的控制器操作
# config/routes.rb
root to: "application#not_found"
# app/controllers/application_controller.rb
def not_found
render plain: "Not found.", status: 404
end
第三种选择当然是路由到一个不存在的动作,但我认为这不是一个好主意,因为意图是模糊的,很容易被误认为是错误。
如果删除它,您将看到来自 Rails 的默认问候语,其中包括有关您的环境的一些技术信息。这不太可能是您需要的行为。
我是这样解决的:
Rails.application.routes.draw do
namespace :admin do
...
end
# To prevent users from seeing the default welcome message "Welcome aboard" from Rails
root to: redirect('admin/sign_in')
end
默认情况下,rails 将在生产中呈现 404 默认页面(不是欢迎页面)。
创建新的 Rails 应用程序时,默认情况下它将在 /
提供 "Welcome to Rails" 页面,除非您在 routes.rb
中指定替代 root
。
我的应用程序目前仅提供来自子路径(例如 /api/v1/
)的内容,因此访问 /
应该会导致 404。我该如何完成此操作?
如果您想呈现 404
响应,我可以想到两种方法。
首先,您可以路由到 Rack,然后 return 一个简单的 404
响应:
# config/routes.rb
root to: proc { [404, {}, ["Not found."]] }
其次,您可以采取明显的路线并将 root 指向 returns 404
:
# config/routes.rb
root to: "application#not_found"
# app/controllers/application_controller.rb
def not_found
render plain: "Not found.", status: 404
end
第三种选择当然是路由到一个不存在的动作,但我认为这不是一个好主意,因为意图是模糊的,很容易被误认为是错误。
如果删除它,您将看到来自 Rails 的默认问候语,其中包括有关您的环境的一些技术信息。这不太可能是您需要的行为。
我是这样解决的:
Rails.application.routes.draw do
namespace :admin do
...
end
# To prevent users from seeing the default welcome message "Welcome aboard" from Rails
root to: redirect('admin/sign_in')
end
默认情况下,rails 将在生产中呈现 404 默认页面(不是欢迎页面)。