【问题标题】:Bundler downloads gems present on the system?Bundler 下载系统上存在的 gem?
【发布时间】:2014-01-17 19:43:00
【问题描述】:

我想知道,为什么 bundler 总是下载我的 gemset 中已经存在的 gem?我的意思是,每次运行 rails newbundle install 命令后,bundler 都会下载系统上存在的相同 gem。现在,我知道 --local 选项可以防止这种行为,但只是认为如果它可以先做一个简单的检查,这到底是什么意思。

编辑:对不起,伙计们,似乎捆绑器实际上是在使用系统中的宝石。我不这么认为,因为他花了大约 20 秒才能完成,但这是由于我的互联网连接速度非常慢,可能需要很长时间才能完成解决依赖关系。

【问题讨论】:

  • 我没有注意到 bundler 的这种行为,我该如何重现它
  • 您是说每次运行 bundler 时都会重新安装?你怎么说它每次都在下载?

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 bundler


【解决方案1】:

Bundler 不会重新获取 gem,除非其中一项为真:

  • 您没有安装相同的 gem 和相同的版本(或允许的版本范围)。
  • 您正在为不同的项目使用 RVM 和不同的 gemset,而不是将它们放在全局 gemset 中。
  • gem 路径不在 Bundler 使用的搜索路径中。

如果这对您来说是个问题,您可以使用 --local 来强制 Bundler 甚至不再寻找其他任何东西,但您也可以为所有 gem 指定版本。并确保正确的版本在 Gemfile.lock 中。

最后,Bundler 只会做你告诉它做的事情。当然,你也可以不使用Bundler。

【讨论】:

    【解决方案2】:

    bundle install 的默认值是 --system 选项,它将在系统范围内安装,因此也将使用现有的 gem。

    如果您使用 rvm 之类的东西,您将不会看到这种行为。另外,请注意,bundler 会记住为 path 等某些参数提供的先前参数。如果它以前用于应用程序,它将被记住以供将来调用。

    --local是使用本地缓存-http://bundler.io/v1.5/man/bundle-install.1.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多