56

我搜索了我的应用程序的目录,但找不到默认 rails Welcome Aboard 页面的 html 页面。我也无法在 routes.rb 中找到默认 Welcome Aboard 页面的路线。我的 Rails 应用程序如何路由http://localhost:3000/到我的应用程序中不存在的页面?

rails 服务器生成以下信息:

Started GET "/" for 127.0.0.1 at 2013-07-31 02:00:13 -0600
Processing by Rails::WelcomeController#index as HTML
  Rendered /Users/7stud/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/railties-4.0.0/lib/rails/templates/rails/welcome/index.html.erb (0.1ms)
Completed 200 OK in 3ms (Views: 2.5ms | ActiveRecord: 0.0ms)

所以在我看来,有一个控制器隐藏在某个处理请求的宝石中。

4

1 回答 1

74

从 Rails 4 开始,“Welcome aboard”页面不再位于public/index.html. 正如您已经发现的那样,它位于 Rails gem 之一中。

所以你已经自己回答了这个问题;“欢迎登机”页面 - 在您的情况下 - 位于/Users/7stud/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/railties-4.0.0/lib/rails/templates/rails/welcome/index.html.erb

要摆脱它,请按照页面上的说明进行操作。基本上它们是:

  1. 创建控制器
  2. 添加根路由config/routes.rb以路由到新创建的控制器。

至于对应用程序的请求如何最终到达 railties 内部的控制器,让我们深入研究一下 gem:在里面Rails::Application::Finisher我们发现:

initializer :add_builtin_route do |app|
  if Rails.env.development?
    app.routes.append do
      get '/rails/info/properties' => "rails/info#properties"
      get '/rails/info/routes'     => "rails/info#routes"
      get '/rails/info'            => "rails/info#index"
      get '/'                      => "rails/welcome#index"
    end
  end
end

当在开发模式下运行时,此块向您的应用程序添加了一些路由 - 其中之一是“欢迎登机”操作的路由:get '/' => "rails/welcome#index"

这 - 与任何其他初始化程序一样 - 在您启动应用程序服务器时完成(运行rails server或您执行它)。在 的情况下Finisher,它的所有初始化程序都在所有其他初始化程序运行后运行。

请注意如何附加路由,以便它们在 Routeset 中出现在最后。这与 Rails 使用它找到的第一个匹配路由这一事实相结合,确保只有在没有定义其他路由时才会使用这些默认路由。

于 2013-07-31T08:19:17.063 回答