awe*_*ndt 11 ruby rack ruby-on-rails
机架指定
Rack应用程序是响应调用的Ruby对象(不是类).
因此,一个简单的config.ru看起来像这样:
class MyApp
def call(env)
[200, {"Content-Type" => "text/plain"}, ["Hello from Rack!\n"]]
end
end
run MyApp.new
Run Code Online (Sandbox Code Playgroud)
而Rails生成这个:
# This file is used by Rack-based servers to start the application.
require ::File.expand_path('../config/environment', __FILE__)
run RailsApp::Application
Run Code Online (Sandbox Code Playgroud)
所以,我想知道:为什么不在run RailsApp::Application.newRack指定它是一个对象而不是一个类?Rails::Application我缺少什么特别的东西?
Hol*_*ust 17
这确实有点隐藏:)
RailsApp::Application是一个儿童类Rails::Application,反过来Rails::Engine是一个Rails::Railtie.现在Rails::Railtie有一个inherited钩子,只要子类继承自Railtie类(在本例中Engine),就会调用它.
此回调包括Rails::Railtie::Configurable将子模块放入子类中.在本单元中,您将找到魔法的第一部分.
在method_missing它获取的类中定义的方法调用方法的类的一个实例,这或多或少解析为
RailsApp::Application.new.call(...)
Run Code Online (Sandbox Code Playgroud)
此call实例方法定义在Rails::Application#call典型的Rack处理中.
可能还有更多的魔法使它不是100%相当,但应该大致是......
| 归档时间: |
|
| 查看次数: |
3177 次 |
| 最近记录: |