Rails 3 请求调度周期

2024-01-01

我正在研究 Rails 3 架构,以便了解分派请求的过程。整个过程非常简单。应用程序是一个机架应用程序,它最终将其调用消息委托给 ActionDispatch::Routing::RouteSet 的调用方法,该方法调度必要控制器的适当操作。它通过键“action_dispatch.request.path_parameters”从存储在rack env 中的哈希中获取控制器和操作名称。

所以问题是:谁设置这个哈希值?谁解析请求 uri 并确定操作和控制器名称?

我无法找到这段代码。我看到在路由配置期间 ActionDispatch::Routing::Mapper 对象用于构造有关已定义路由的信息并将其存储在 ActionDispatch::Routing::RouteSet 中。但是在请求期间如何使用此信息来查找适当的操作和控制器。机架也以某种方式参与其中吗?


“action_dispatch.request.path_parameters”存储为常量ActionDispatch::Routing::RouteSet::PARAMETERS_KEY(actionpack/lib/action_dispatch/routing/route_set.rb)

PARAMETERS_KEY稍后在同一个文件中使用并传递到构造函数中::Rack::Mount::RouteSet

即将::Rack::Mount::RouteSet来源在这里:https://github.com/josh/rack-mount/blob/master/lib/rack/mount/route_set.rb#L22 https://github.com/josh/rack-mount/blob/master/lib/rack/mount/route_set.rb#L22您可以看到存储了属性名称。

相同的文件,在下面call(env)方法当然是要调用的 Rack 接口,我们看到这一行(https://github.com/josh/rack-mount/blob/master/lib/rack/mount/route_set.rb#L147 https://github.com/josh/rack-mount/blob/master/lib/rack/mount/route_set.rb#L147)你的env["action_dispatch.request.path_parameters"]属性实际上已设置,并最终返回到您正在研究的代码中。

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 3 请求调度周期 的相关文章

随机推荐

  • org.springframework.beans.factory.CannotLoadBeanClassException:找不到类

    我将 Tomcat 6 0 安装目录中的 j2ee jar 替换为 servle api com 这会产生以下错误 我目前正在尝试找出原因 可能是什么问题 我在配置文件中定义了一个 bean Sempedia service xml 如下
  • 如何使用 PHP Curl 将文件上传到 AWS 预签名 URL?

    我正在尝试使用 PHP Curl 通过预签名 URL 将文件从 上传到 AWS 虽然文件似乎已成功上传 但在下载最近上传的文件后 尝试打开新下载的文件失败 根据文件类型 我收到 此文件已损坏 或 看起来我们不支持此文件格式 或 我们无法打开
  • Android NDK R8E 缺少 stdlib.h

    我正在使用 Android NDK android ndk r8e 测试一些本机库代码 本机库是从其 makefile 构建的 而不是 Android 修改后的构建系统 使用 makefile 而不是 Android 的构建系统是项目要求
  • 无法让滚动条出现在溢出时

    我正在构建一个 MDI WEB 应用程序 并且有一个由article元素 具有header and a section对于内容 由于它是一个 MDI 应用程序 article被设定为absolute 因此它可以与其他窗口重叠 我需要一个滚动
  • android webview加载数据时闪烁一次

    我在网络视图中预加载了文本 当来自互联网的数据到来时 我用新数据重新加载网络视图 问题是在加载数据转换期间屏幕闪烁一次 有什么建议吗 尝试禁用活动的硬件加速器 android hardwareAccelerated false
  • 如何通过 pyspeech 或 Dragonfly 输入和处理音频文件以转换为文本

    我看过pyspeech和dragonfly的文档 但不知道如何输入音频文件以转换为文本 我已经尝试使用麦克风通过对它讲话并将语音转换为文本 但是如果我想输入以前录制的音频文件 谁能帮忙举个例子吗 PySpeech 和 Dragonfly 都
  • Spring-服务被eureka服务器发现后关闭

    我的服务 应用程序名称 在启动后立即意外关闭 当时 eureka服务器运行在8761端口 服务已成功被eureka服务器发现 注册状态 204 registering application with eureka with status
  • 在启动时在 Ubuntu 中设置环境变量(通过脚本)

    我想在 Ubuntu 机器 10 04 上设置几个环境变量 但我想通过脚本创建它们的值 就像 export THE ENV VAR script to execute and use stdout from 我尝试过设置 etc envir
  • 为什么 Clojure Hello World 程序与 Java 和 Python 相比如此慢?

    Update 正如许多人所建议的 这看起来是因为 clojure 代码首先被编译然后执行 AOT 编译应该有助于抵消这一点 鉴于我发现实际的 Clojure AOT 编译过程有点难以解决 类路径问题 目录问题等 我编写了一个小的逐步过程he
  • 不带 .git 文件夹的 git -- 远程 git-dir

    提出这个问题更多的是出于好奇 而不是出于任何实际目的 但是我可以有效地让我的 GIT DIR 成为 git example com repo git 吗 因此 不会有 git 文件夹 每一次提交等都会消耗网络开销 编辑 一个潜在的用例可能是
  • 何时使用字典 | (合并)与|=(更新)运算符[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 何时在字典上使用合并和更新运算符 以下示例虽然调用方式有所不同 但它们的输出是相同的 a 1 a 2 b 3 c 6 in both b 4 d
  • C/C++ 基本类型是原子类型吗?

    C C 是基本类型吗 int double等等 原子的 例如线程安全 它们是否没有数据竞争 也就是说 如果一个线程写入此类类型的对象 而另一个线程从中读取 则该行为是否明确定义 如果不是 它取决于编译器还是其他什么 不 基本数据类型 例如
  • 如何在python3中计算ANSI CRC16多项式(0x8005)?

    我尝试使用此代码计算 ANSI CRC16 多项式 0x8005 import crcmod crc16 crcmod mkCrcFun 0x8005 0xffff True 但我收到此错误消息 ValueError 多项式的次数必须为 8
  • 如何将编辑文本值传递给适配器类

    我想将下面的活动中的文本值传递给 TextAdapter 类 公共类 SecondActivity 扩展 Activity EditText et1 TextView t1 t2 Button b1 b2 String result Con
  • 无法将参数发送到 PHP POST 参数 android

    我目前正在使用 android volley 并尝试通过发送productID来选择产品详细信息以获取产品的详细数据 JSONObject params new JSONObject try params put ProductID int
  • 如何解密 Objective C/IOS 中用 php 加密的文件?

    我在谷歌上搜索了太多这个错误 但没有发现任何有用的东西 我使用以下代码获取在 php 中加密的文件 mcrypt encrypt MCRYPT RIJNDAEL 128 privateencryptkey base64 encode fil
  • Hint.interpret 在用于 Polysemy.Sem 值时会给出编译器错误

    我正在尝试编译Polysemy https hackage haskell org package polysemy 1 2 3 0 docs Polysemy html运行时使用 Hint 语言 Haskell 解释器 https hac
  • 意外的 JDWP 错误 21

    HttpConnection conn HttpConnection Connector open strDefURL strBloggersURL 我有这一行抛出 InternalException 意外的 JDWP 错误 21 我使用它
  • 如何在Arduino中匹配字符串中的文本

    我在使用 Arduino 时遇到一些关于如何匹配文本的问题 I have String tmp CLIP 37011111111 145 0 我正在尝试匹配 if tmp startsWith CLIP mySerial println A
  • Rails 3 请求调度周期

    我正在研究 Rails 3 架构 以便了解分派请求的过程 整个过程非常简单 应用程序是一个机架应用程序 它最终将其调用消息委托给 ActionDispatch Routing RouteSet 的调用方法 该方法调度必要控制器的适当操作 它