【问题标题】:Can I remove the default root in a Rails application without creating a new one?我可以删除 Rails 应用程序中的默认根而不创建新根吗?
【发布时间】:2015-11-05 10:00:20
【问题描述】:

当创建一个新的 Rails 应用程序时,默认情况下它会在 / 处提供一个“欢迎使用 Rails”页面,除非您在 routes.rb 中指定替代 root

我的应用程序目前只提供来自子路径的内容(例如 /api/v1/),因此访问 / 应该会导致 404。我该如何实现呢?

【问题讨论】:

  • 例如root to: 'home#no_root',会渲染一个404
  • 这似乎行得通;没有更好的方法吗?
  • 应用程序通常有一个根:)
  • 公平点。我想我只需要找到一些合乎逻辑的东西。也许是 302 到 /api/v1
  • 最好有一个入口点,也许是静态的。对于面向公众的 API,这可能是一个链接到文档的好地方,因此任何偶然发现您的 API 的人都可能会考虑使用它。

标签: ruby-on-rails ruby url-routing


【解决方案1】:

如果你想呈现一个404 响应,我可以想到两种方法。

首先,您可以路由到 Rack,并返回一个简单的 404 响应:

# config/routes.rb
root to: proc { [404, {}, ["Not found."]] }

其次,您可以采取明显的路线并将根指向返回 404 的控制器操作:

# config/routes.rb
root to: "application#not_found"

# app/controllers/application_controller.rb
def not_found
  render plain: "Not found.", status: 404
end

当然,第三种选择是路由到一个不存在的操作,但我认为这不是一个好主意,因为意图是模糊的,很容易被认为是错误的。

【讨论】:

【解决方案2】:

如果您删除它,您将看到来自 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

【讨论】:

    【解决方案3】:

    默认情况下,rails 会在生产环境中渲染 404 默认页面(不是欢迎页面)。

    【讨论】:

      猜你喜欢
      • 2019-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多