ruby-on-rails – Bundler Capistrano问题:Rails如何知道我的宝石在哪里?

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

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

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

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

解决方法

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

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

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

:shared_pa​​th来自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进行设置.

bundler.rb中的configure_gem_home_and_path方法设置ENV [‘GEM_HOME’],它基于一些设置,通过一个复杂的进程最终从.bundle / config获取BUNDLE_PATH.

呼…

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...