Ruby on rails Rails::Application.initialize!方法源位置

Ruby on rails Rails::Application.initialize!方法源位置,ruby-on-rails,ruby,Ruby On Rails,Ruby,我想在我的博客应用程序的environment.rb中找到以下行的源代码 Blog::Application.initialize! 如果发现,则初始化!方法仅在源代码中的一个位置定义 railties/lib/rails/application.rb 然而,它是一个实例方法 我在rails控制台中做了一些实验: Blog::Application.initialize! # => Application has been already initialized Blog::Appli

我想在我的博客应用程序的environment.rb中找到以下行的源代码

Blog::Application.initialize!
如果发现,则初始化!方法仅在源代码中的一个位置定义

railties/lib/rails/application.rb

然而,它是一个实例方法

我在rails控制台中做了一些实验:

Blog::Application.initialize!  # => Application has been already initialized
Blog::Application.method(:initialize!)  # => undefined method for Class
Blog::Application.instance_methods.include?(:initialize!)  # => true

奇怪的是,
initialize有一个未定义的方法当它在应用程序类上明确可调用时。请帮助理解这段代码。

这是由于一些Ruby Magic,又称“方法缺失”:

查看
可配置.rb

module Rails
  class Railtie
    module Configurable
      extend ActiveSupport::Concern
      module ClassMethods
        [...]

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

它删除对底层应用程序实例的所有调用。

如果它是
Blog::application
的实例方法,则您将无法调用
Blog::application.initialize。您的描述相互矛盾。@sawa或尝试创建一个新的rails应用程序。不,我不会。我不会听从你的命令。这很有道理,回答了我的问题。然而,我很难理解Rails::Railtie::Configurable是如何包含在Blog::Application中的。它不会出现在Rails::Application的祖先中。如果您可以编辑答案指出这一点,这将是很有帮助的。
Blog::Application.ancestors
=> [... Rails::Railtie::Configurable ...]
module Rails
  class Railtie
    module Configurable
      extend ActiveSupport::Concern
      module ClassMethods
        [...]

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