【问题标题】:What's the deal with rubygems on Debian? It's different and strangeDebian 上的 ruby​​gems 是怎么回事?这是不同的和奇怪的
【发布时间】:2011-02-20 06:25:08
【问题描述】:

我注意到 Debian 上的 ruby​​gems 至少有以下奇怪之处(在我的例子中是 5.0 lenny):

  • 软件包进入不同的安装位置:/var/lib/gems vs /usr/lib/ruby/gems
  • debian 包是 ruby​​gems 1.3.6,将 ruby​​gems 更新到最新版本 (1.3.7) 不起作用:
$ sudo gem 更新--系统 错误:执行 gem 时...(RuntimeError) gem update --system 在 Debian 上被禁用。 RubyGems 可以通过 aptitude 或 apt-get 使用官方 Debian 存储库进行更新。
  • 并非所有 gem 都像在其他系统上那样工作。例如,在安装 Phusion Passenger 时,即使它确实已安装,它也没有检测到“机架”gem。
  • 使用源 tarball 手动安装 ruby​​gems 并重新安装我的所有 gem(到 /usr/lib/ruby/gems)使我的问题消失了。

有什么关系?为什么debian的包不一样?

【问题讨论】:

    标签: ruby rubygems debian package


    【解决方案1】:

    请注意,我在下面写的内容最近发生了重大变化。 Debian Ruby 团队或多或少地彻底改造了他们的整个方法,包括但不限于他们的 RubyGems 打包。我不确定 Debian 6,但在 之后 的版本中,从 Debian 安装 Ruby 和 RubyGems 包应该是安全的,甚至可能被推荐。显然,这也将渗透到 Ubuntu 中。


    [编辑:最迟从 Debian 7 开始,以下内容已过时。]

    混合到两个不同的包管理器通常是一个非常糟糕的主意。 Debian-Ruby 团队尽最大努力修补 RubyGems,使其成为一个稍微不那么糟糕的主意。

    此外,Debian 有一组旨在保持系统一致性的规则。 RubyGems 有自己的一套规则。不幸的是,这两组规则不兼容。因此,Debian-Ruby 开发人员修补 RubyGems 以尊重 Debian 的 规则而不是 RubyGems 的规则。将 gem 从 /usr/lib/ruby 移动到 /var/lib 就是其中之一。

    另一个问题是 Debian stable 是稳定的。这意味着 Debian 团队保证整个系统的行为,所有 20000 个软件包,在发布期间永远不会改变。但是 RubyGems 开发人员不会单独提供他们的错误修复,获得错误修复的唯一方法是升级到具有(可能)不同行为的新版本。因此,Debian-Ruby 开发人员不能只使用未经修改的 RubyGems 源,他们必须对 1.3.7 中的错误修复进行逆向工程并将它们应用到 他们的 1.3.6 版本,以确保向后兼容。

    一般来说,您应该避免混用包管理器。要么对所有东西都使用 RubyGems(在这种情况下,最好从源代码安装 RubyGems,而不是使用 Debian 包)或对所有东西使用 APT,在这种情况下,你可能会对 DebGem 感兴趣,这是 Phusion 家伙(制造商Ruby Enterprise Edition 和 Phusion Passenger),它为几乎所有 Gems 提供 Debian 和 Ubuntu 软件包。

    【讨论】:

      【解决方案2】:

      如果你喜欢自己管理你的 ruby​​ 环境,我可以看看RVM。这是让不同的环境满足您的开发需求的好方法,因为让 debian 包管理全局 ruby​​ 环境更为明智。

      【讨论】:

        【解决方案3】:

        避免它与众不同和奇怪的最好方法是从源代码安装它。 (很多人建议在任何情况下都这样做。)

        从 1.9.2 开始,从源代码安装 Ruby 非常容易。这让您得到 Gem 和其他一切,自动且完全集成。 (例如,安装 Rails gem 后,您可以输入“ri field_for”来了解 Rails 中嵌套表单的所有信息。)

        无论有没有 RVM,它现在都是获取 Ruby 的最简单、最可靠的方法。无论如何,我的 10c。

        【讨论】:

        • 这不回答原始问题的任何部分。
        • 我认为确实如此——我的意思是它没有必须与众不同和奇怪。编辑了我的答案以使其更清楚。
        • 问题是关于预构建的 Debian 软件包。从源代码和RVM编译与问题无关。
        • 好吧,如果我们要变得挑剔,那么“这是怎么回事……”是一个非常模糊的问题,不是吗?这不是很“实用和可回答”。所以我选择了一个实用的解决方案来解决奇怪和陌生。我不认为这是一件坏事。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-29
        • 1970-01-01
        • 1970-01-01
        • 2015-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多