新手问题 关于 Rails 的 bundle 的疑问

answer · 2015年03月18日 · 最后由 huopo125 回复于 2015年03月19日 · 3998 次阅读
  1. 当执行 bundle install 后,默认是将 gem 安装到哪个目录下的呢?
  2. 如果我把 gemfile.lock 删除后,在执行 bundle install 是不是会安装最新 gem(gemfile 未指定版本号)
  3. 如果用 gem install gem_name 安装相关 gem 后,bundle install 还会安装吗?

看似很简单的问题,想知其所以然,希望得到解答

简单回答

  1. 默认会到$GEM_HOME 下
  2. bundle install 时,会检查gemfile,如没有指定版本号并没有gemfile.lock,会自动从 source 安装最新版本。
  3. 参考 2,只考虑 gemfile 和 gemfile.lock
  1. 默认 bundle install 就装在 ruby 所在的目录了,例如 ~/.rvm/gems/ruby-2.1.5/gems/rspec-rails-3.2.1

  2. 删了 lock 后,bundle install 会先从本地已经安装的 gem 找本地最新版本来依赖。

  3. gem install 之后,bundle install 会复用,不会重新安装。

以上所有行为都是默认情况下,基本上都可以指派参数来调整缺省行为。

#1 楼 @foxzool 那$GEM_HOME 这个环境变量是这哪设定的呀? #2 楼 @lyfi2003 针对 2 的回答,如果本地的版本落后与 source 的版本,那么 bundle install 岂不是安装的不算是最新的版本?

#3 楼 @answer 是的,只有 bundle update 才会更新最新的。关于这点 #1 楼 @foxzool 回复是不对的。

#3 楼 @answer 2 的前提是,你已经删了 gemfile.lock , 并且 gemfile 没有指定版本

@foxzool 是这样的,不过 #2 楼 意思是只有 bundle update 才会从 source 安装最新版本,而 bundle install 是先从本地已经安装的 gem 找本地最新版本

若你想查看当前项目的某个 gem 包安装位置:bundle show gem_name 若你想单独更新一个 gem 包,而不像修改 gemfile 和 gemfile.lock:bundle update gem_name

需要 登录 后方可回复, 如果你还没有账号请 注册新账号