【问题标题】:Preventing Bundler to install gems under the Ruby version namespace阻止 Bundler 在 Ruby 版本命名空间下安装 gem
【发布时间】:2015-03-03 04:50:03
【问题描述】:

当我使用 Bundler 将 gems 安装到项目目录时,出于某种原因,它将它们安装在 Ruby 版本命名空间下,即vendor/bundle/ruby/2.1.0

为什么 Bundler 会有这样的行为?有什么办法可以阻止 Bundler 在 Ruby 版本命名空间下安装 gem,而是直接将它们放入 vendor/bundle

【问题讨论】:

    标签: ruby bundler


    【解决方案1】:

    Bundler 这样做的原因与 ruby​​gems 这样做的原因相同 - 不同的 Ruby 发行版可能没有兼容的 gem。例如,针对 1.9.3 的 ruby​​.h 构建的带有 C 扩展的 gem 不能在 2.1.0 下运行,也不能在 JRuby 下运行。纯 Ruby gem 应该可以工作,但是纯 Ruby gem 和在 Rubygems 或 Bundler 中具有本机扩展的 gem 之间没有区别,因此系统表现得比较保守。此外,一些 gem 在其 gemspecs 中指定 required_ruby_version,这会将它们锁定到特定的 Ruby 版本或多个版本;支持这种功能需要命名空间。

    虽然您可能会修补一些东西以获得您想要的行为,但这并不是非常可取的,因为针对错误 Ruby 版本运行的 C 扩展可能会导致您的进程出现段错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 2013-01-13
      • 2016-11-09
      • 1970-01-01
      相关资源
      最近更新 更多