Ruby on rails 捆绑机是如何工作的?

Ruby on rails 捆绑机是如何工作的?,ruby-on-rails,ruby,ruby-on-rails-3,rubygems,bundler,Ruby On Rails,Ruby,Ruby On Rails 3,Rubygems,Bundler,这个问题是关于bundler,rubygems&它如何确定我调用的方法。它很长,所以请耐心听我说 据我所知,Bundler是一个用于管理ruby的gems的依赖项管理工具。它安装了Gemfile中列出的所有gem及其依赖项 我想问的问题最好用一个例子来说明。因此-->在我的rails应用程序中,我在控制器中执行以下操作:- module SurveyorControllerCustomMethods def create super end end class SurveyorC

这个问题是关于bundler,rubygems&它如何确定我调用的方法。它很长,所以请耐心听我说

据我所知,Bundler是一个用于管理ruby的gems的依赖项管理工具。它安装了
Gemfile
中列出的所有gem及其依赖项

我想问的问题最好用一个例子来说明。因此-->在我的rails应用程序中,我在控制器中执行以下操作:-

module SurveyorControllerCustomMethods
  def create
    super
  end
end
class SurveyorController < ApplicationController
   include Surveyor::SurveyorControllerMethods
end
令人惊讶的是,ruby的。所以问题是:

  • 它是如何工作的
  • 使用bundler安装gem,安装过程中幕后会发生什么
  • 有一些gems-ex
    jquery-rails
    ,我们甚至不需要在代码中包含/调用它们&然而,jquery-JavaScript文件是自动包含的。我知道这不是魔法,这是怎么回事
    它们的关键实际上在于如何在开箱即用的情况下设置Rails。这也是Rails在大型项目上启动缓慢的原因之一

    在boot.rb中,您将发现:

    require 'bunder/setup'
    
    Bundler.require(:default, :development)
    
    在application.rb的顶部,您会发现:

    require 'bunder/setup'
    
    Bundler.require(:default, :development)
    
    最后一个方法调用返回GEM文件,然后迭代给定组中的所有GEM(
    :default
    :development
    )。然后,它尝试确定应该加载的默认文件是什么,这通常是gem名称,但也可以由
    :require
    选项指定。Bundler也有一些内置的命名约定异常,例如处理“-”而不是“\u1”

    Bundler然后只加载gem的主文件,然后(通常)加载gem内部的文件

    'bundler/setup'
    文件执行负责加载路径的
    bundler.setup
    。它为每个gem在
    $LOAD\u路径
    前加(取消移位)前缀。关于这些负载路径应该是什么的实际信息来自rubygems

    请查看以下内容中的源代码:

    https://github.com/carlhuda/bundler/blob/master/lib/bundler/runtime.rb


    [1] :当你启动一个新的Rails项目时,如果你删除Bundler.require行,只需要gems,你可能会发现它不会随着时间的推移变得如此缓慢。

    我在
    config/boot.rb
    config/application.rb
    中找不到
    Bundler.setup(:default,:development)
    ,抱歉,它需要
    bundler/setup
    ,这是间接的