我进行了快速搜索,但找不到直接答案。 Rails 新手,只是想了解为什么会这样。如果有人能指出一段代码,显示它指向 index.html 的位置(如果它存在),我真的很感激,或者,如果这是错误的思考方式,正确的答案是什么。

最佳答案

在 Rails 3 中,railties 定义了一个默认的中间件堆栈 (railties/lib/rails/application.rb),允许每种类型的中间件访问请求调用。堆栈中的第一个模块是 ActionDispatch::Static(可以使用 config.serve_static_assets 禁用它)。静态中间件模块在 ActionPack (actionpack/lib/action_dispatch/middleware/static.rb) 中。其中的相关行是:

path   = env['PATH_INFO'].chomp('/')
...
if file_exist?(path)
  return @file_server.call(env)

@file_server 在上面定义为 Rack::File,它位于 rack/lib/rack/file.rb 中。它只是读取文件并将内容作为正文提供。

那么当你删除 index.html 时,file_exist?调用失败,它只是将请求传递给下一个中间件,最终将命中正常的 Rails 路由器。

关于ruby-on-rails - 为什么我必须删除 rails 应用程序中的 index.html 文件才能将 Controller 映射到根目录才能显示?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4534173/

10-16 23:40