繁体   English   中英

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

[英]Bundler Capistrano question: How does Rails know where my gems are?

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

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

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

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

jdl,感谢您前往哪里寻找。 这是我对发生的事情的理解。

Bundler自动将gem安装到shared / bundle中,如使用bundle_dir中的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_pathbundler.rb设置ENV['GEM_HOME']它是基于关闭的某些设置,即,通过一个令人费解的过程最终得到的BUNDLE_PATH从.bundle /配置。

呼...

您正在寻找GEM_HOME环境变量。

文件在这里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM