Ruby on rails MyApp::Application.initialize有什么功能!使命感

Ruby on rails MyApp::Application.initialize有什么功能!使命感,ruby-on-rails,ruby,ruby-on-rails-3,initialization,Ruby On Rails,Ruby,Ruby On Rails 3,Initialization,我试图弄清楚rails 3的初始化。我知道每个应用程序都会在environment.rb中调用以下函数来初始化整个应用程序: MyApp::Application.initialize 我们应该从中期待初始化!是Rails::Application的类方法。但是在我重新编写了源代码之后,我发现应该是初始化!是实际调用的实例方法: def initialize!(group=:default) #:nodoc: raise "Application has been already initi

我试图弄清楚rails 3的初始化。我知道每个应用程序都会在environment.rb中调用以下函数来初始化整个应用程序:

MyApp::Application.initialize

我们应该从中期待初始化!是Rails::Application的类方法。但是在我重新编写了源代码之后,我发现应该是初始化!是实际调用的实例方法:

def initialize!(group=:default) #:nodoc:
  raise "Application has been already initialized." if @initialized
  run_initializers(group, self)
  @initialized = true
  self
end

那么,尽管我们希望使用类方法,为什么要调用实例方法呢?是否有方法委派之类的技巧?

是的。有个小把戏。如果您查看
railties
gem中的文件
lib/rails/railtie/configurable.rb
,您将看到以下委托给实例的代码

def method_missing(*args, &block)
  instance.send(*args, &block)
end

如果您不知道缺少钩子的方法,您可以在此处阅读更多信息:

谢谢!我以前以为这个调用被委托给了
Rails.initialize仅包含一行
application.initialize这是有意义的。我添加了一些调试打印,但发现Rails.initialize!在初始化过程中从未调用。我错过了
方法\u错过了
家伙。所以还有另一个问题:
Rails.initialize为什么要初始化呢存在?这段代码已经存在好几年了,所以我假设它最初用于调用Rails.initialize!用于初始化,但在某个时候社区通过应用程序名称空间实现了初始化,并停止使用该方法。我不认为它在任何地方都被使用。也许yiu应该向rails提交一张罚单来反对它?也许这会有帮助,因为我正在搜索一个类似的问题,该问题在哪里初始化!方法是。如果您对什么是应用程序而不是应用程序类有疑问,请返回到第一部分。仅与感兴趣的部分相关的漂亮列表非常棒。查看Rails MyApp的实例现在如何使用实例变量,我们可以将其发送到路径中的任何方法。谢谢你的问题,因为这是一个好问题,奇怪的是,这么长时间以来只有一个答案。