这个问题是关于bundler,rubygems&它是如何确定我调用的方法。它很长,所以请耐心等待。
根据我的理解,Bundler是一个用于管理ruby的gem的依赖管理工具。它安装所有的宝石和&他们的依赖关系列在Gemfile
中。
我想问的问题可以用一个例子来说明。所以这里 - >在我的rails应用程序中,我在我的控制器中执行此操作: -
module SurveyorControllerCustomMethods
def create
super
end
end
class SurveyorController < ApplicationController
include Surveyor::SurveyorControllerMethods
end
在这里,我做了两件事:
SurveyorControllerMethods
。 create
方法
SurveyorControllerMethods
工作正常,但我没有
理解它。并且宝石安装在
$ bundle show surveyor
/home/gaurish/.rvm/gems/ruby-1.9.3-p194/gems/surveyor-0.22.0
令人惊讶的是,在红宝石的$LOAD_PATH
中并不存在。所以问题是:
jquery-rails
。然而,自动包含jQuery JavaScript文件。我知道它不是魔术,所以它是如何工作的? 答案 0 :(得分:2)
他们的关键在于如何开箱即用Rails。这也是Rails开始大型项目的原因之一。[1]
在boot.rb中你会找到:
require 'bunder/setup'
在application.rb的顶部你会找到:
Bundler.require(:default, :development)
最后一个方法调用回溯到你的Gemfile,然后迭代所有的所有组中的宝石(上面的:default
和:development
)。然后,它会确定应该加载的默认文件是什么,通常是gem名称,但也可以由:require
选项指定。 Bundler也有一些内置的命名约定异常,例如处理“ - ”而不是“_”。
Bundler然后只加载gem的主文件,然后(通常)加载gem中的文件。
'bundler/setup'
文件执行Bundler.setup
,负责处理加载路径。它为每个宝石的$LOAD_PATH
预先(取消)。关于那些加载路径应该是什么的实际信息来自rubygems。
看一下来源:
https://github.com/carlhuda/bundler/blob/master/lib/bundler/setup.rb https://github.com/carlhuda/bundler/blob/master/lib/bundler/runtime.rb
[1]:当你启动一个新的Rails项目时,你可能会发现如果你删除Bundler.require行并且只需要宝石就不会那么慢。