2012-11-27 174 views
1
测试轨道/机架应用

我的Rails的叠层的简单化的理解是,它执行以下操作(一般)使用导轨控制台

  1. 输入是一个HTTP消息(GET,POST,PUT,DELETE,HEAD ),一个URL,一些(可选的)cookie,一个(可选的)会话令牌以及可能以JSON或XML格式打包的一些数据。
  2. 这个HTTP消息由Rack处理,它可以通过一组“中间件”功能来运行它,这些功能可以从消息中添加或删除数据,并可以使用这些数据来添加,修改或删除程序数据存储中的数据。
  3. Rack输出端的HTTP消息被发送到Rails路由器,Rails路由器将其映射到一个控制器,一个动作和一个params散列,其中包含会话信息,cookie和其他参数。数据被分派到适当的控制器。
  4. 控制器方法分析参数,并将其与数据库中的数据(通过模型)进行算法结合,可选地更改数据,然后将一组以@开头的变量分配给视图模板。
  5. 视图模板获取数据并将其与视图模板合并以形成具有适当格式(例如,HTML,JS,JSON,XML等)的视图,或者它告诉调用者(通过HTTP返回代码)重定向到另一个URL。

我愿做什么用我的Rails Web应用程序,使用Rails的控制台

  1. 撰写有效的HTTP消息的URL,会话ID,cookie和编码数据(JSON或XML) 。
  2. 将此数据注入Rack接口,并检查发送给Rails路由器之前出现的内容。
  3. 然后,我想将这些数据发送到Rails路由器,并查看在它进入控制器之前发生了什么。
  4. 然后,我想将这些数据发送到控制器,并查看它发送到视图模板之前发生了什么。
  5. 然后我想将这些数据运行并通过视图模板运行,并在STDOUT上显示,或让它自动打开Web浏览器并查看它的呈现。

是否有任何现有的Rails工具可以做到这一点?如果没有,任何人都可以将我指向这些接口出现的Rails代码?

回答

0

你要找的大部分内容都在rails的actionpack库中。

ActionDispatch处理与机架,中间件和路由器的接口。该请求会将路由器作为最后一件中间件。路由器本身在action_dispatch/routing/mapper中被调用。因此,如果您想在请求路由器之前拦截请求,请在路由被调用之前注入您自己的中间件。

一旦路由器映射验证它具有有效的路由,它会调用railties库中已结束的应用程序。我相信这会让你回到ActionController中间件中。我不确定你到底想要在截获控制器之前绑定的位置,但我猜测它会在ActionMiddleware类的某个地方。

从那里你进入actionpack。你的控制器调用的渲染/重定向设置了actionpack中会发生的事情。我不确定AC到达AP的哪个位置,但您应该能够通过它筛选并找到您要找的路径。

至于响应,你回到中间件。一旦导轨将视图拼接在一起,它基本上会展开,并在将响应发送回Rack之前将其放回中间件堆栈。

希望有所帮助。

+0

感谢您的洞察。我会研究它。 –