Ruby on rails Bundler Capistrano问题:Rails如何知道我的宝石在哪里?
我使用的是标准bundler/capistrano配方,它在部署后在服务器上安装所有必要的gemRuby on rails Bundler Capistrano问题:Rails如何知道我的宝石在哪里?,ruby-on-rails,rubygems,capistrano,bundler,Ruby On Rails,Rubygems,Capistrano,Bundler,我使用的是标准bundler/capistrano配方,它在部署后在服务器上安装所有必要的gem:update\u code 工作就像一种魅力,大大简化了我的生活 我正在使用Rails 2.3.10和“修补”boot.rb,并根据需要创建了预初始化器 我的问题是,Rails如何知道我的gems驻留在shared/bundle目录中,以及如何知道如何使用它们?该目录是否自动添加到加载路径?这些GEM如何取代系统GEM?您需要的是GEM\u HOME环境变量 jdl,谢谢你提醒我去哪里找。以下是我对
:update\u code
工作就像一种魅力,大大简化了我的生活
我正在使用Rails 2.3.10和“修补”boot.rb,并根据需要创建了预初始化器
我的问题是,Rails如何知道我的gems驻留在shared/bundle目录中,以及如何知道如何使用它们?该目录是否自动添加到加载路径?这些GEM如何取代系统GEM?您需要的是
GEM\u HOME
环境变量
jdl,谢谢你提醒我去哪里找。以下是我对所发生事情的理解 Bundler自动将gems安装到shared/bundle中,如使用Gemfile中的
bundle\u dir
指定的,默认为:
# (line 39 bundler/deployment.rb)
set :bundle_dir, File.join(fetch(:shared_path), 'bundle')
:共享路径
来自capistrano
这就是安装gems的第一步。现在,据我所知,当您指定要安装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\u gem\u home\u和\u path
方法设置ENV['gem\u home']
,它基于一些设置,通过复杂的过程,最终从.BUNDLE/config中获得BUNDLE\u path
哇…但我的问题是。。。GEM_HOME如何指向我的共享/捆绑目录,我从来没有明确设置过这个目录。我假设Bundler有点神奇,但我不知道在哪里。对不起,我没有更多的时间。查看bundler gem中的
bundler.rb
。您应该在那里找到一些修改GEM\u HOME
和GEM\u路径的内容。追踪代码,我敢打赌你会发现它在哪里抓住了你所指的宝石。请看我下面的帖子,我想我得到了答案。我想这个答案与capistrano无关,而是与bundler的一般用法有关