我正在使用标准的bundler / capistrano配方,在服务器上安装所有必需的宝石after deploy:update_code
像魅力一样,显着简化了我的生活。
我正在使用Rails 2.3.10并“修补”boot.rb并根据需要创建了preinitializer。
我的问题是,Rails如何知道我的宝石存在于shared / bundle目录中,以及它如何知道使用它们?此目录是否以某种方式自动添加到加载路径?这些宝石如何先于系统宝石?
答案 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
环境变量。