Bundler Capistrano问题:Rails如何知道我的宝石在哪里?

时间:2011-03-17 14:01:13

标签: ruby-on-rails rubygems capistrano bundler

我正在使用标准的bundler / capistrano配方,在服务器上安装所有必需的宝石after deploy:update_code

像魅力一样,显着简化了我的生活。

我正在使用Rails 2.3.10并“修补”boot.rb并根据需要创建了preinitializer。

我的问题是,Rails如何知道我的宝石存在于shared / bundle目录中,以及它如何知道使用它们?此目录是否以某种方式自动添加到加载路径?这些宝石如何先于系统宝石?

2 个答案:

答案 0 :(得分:11)

jdl,谢谢你抬头看看哪里。这是我对发生的事情的理解。

Bundler自动将gem安装到shared / bundle中,如Gemfile中使用bundle_dir所指定的那样,默认为:

# (line 39 bundler/deployment.rb)
set :bundle_dir, File.join(fetch(:shared_path), 'bundle')

:shared_path来自capistrano

这是安装宝石的第一步。现在,据我所知,当你指定一个目录来安装gems时,Bundler总是修改根目录中的.bundle/config(即Gemfile所在的位置)。这是我在对共享目录进行捆绑安装后的样子:

--- 
BUNDLE_DISABLE_SHARED_GEMS: "1"
BUNDLE_WITHOUT: development:test
BUNDLE_FROZEN: "1"
BUNDLE_PATH: /mnt/apps/my_app/shared/bundle

然后,(正如jdl所指出的那样)GEM_HOME基于此.bundle / config进行设置。

configure_gem_home_and_path中的方法bundler.rb设置ENV['GEM_HOME']并且它基于某些设置,通过复杂的过程最终从您的.bundle获取BUNDLE_PATH /配置。

嗯...

答案 1 :(得分:0)

您正在寻找GEM_HOME环境变量。

Docs are here.