我可以删除 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 默认页面(不是欢迎页面)。