在Debian上与rubygems有什么关系?这是不同的和奇怪的

时间:2010-05-17 05:18:33

标签: ruby rubygems debian package

我至少注意到Debian上的rubygems至少存在以下奇怪之处(在我的情况下为5.0 lenny):

  • 包进入不同的安装位置:/ var / lib / gems vs / usr / lib / ruby​​ / gems
  • debian软件包是rubygems 1.3.6,将rubygems更新到最新版本(1.3.7)不起作用:
  $ sudo gem update --system
  ERROR:  While executing gem ... (RuntimeError)
    gem update --system is disabled on Debian. RubyGems can be updated using the official Debian repositories by aptitude or apt-get.
  • 并非所有宝石看起来都像在其他系统上那样工作。例如,在安装Phusion Passenger时,即使它已经安装好,也没有检测到“机架”宝石。
  • 使用源代码tarball手动安装rubygems并重新安装我的所有宝石(到/ usr / lib / ruby​​ / gems)让我的问题消失了。

这笔交易是什么?为什么debian的包装有所不同?

3 个答案:

答案 0 :(得分:15)

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


[编辑:最迟在Debian 7中已经过时了。]

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

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

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

通常,您应该避免混合包管理器。要么将RubyGems用于所有东西(在这种情况下最好从源代码安装RubyGems而不是使用Debian软件包)或者使用APT代替所有东西,在这种情况下你可能会对DebGem感兴趣,这是Phusion的一项服务(Ruby Enterprise Edition和Phusion Passenger的制造商)为几乎所有Gems提供Debian和Ubuntu软件包。

答案 1 :(得分:3)

如果您想管理自己的红宝石环境,我可以看看RVM。这是让不同环境捕捉开发需求的好方法,因为让debian软件包管理全局ruby环境更明智。

答案 2 :(得分:1)

避免它变得异常和奇怪的最好方法是从源代码安装它。 (许多人建议在任何情况下这样做。)

对于1.9.2以上,从源代码安装Ruby非常容易。这可以让你获得宝石和其他一切,自动,完全集成。 (例如,安装了Rails gem后,您可以键入'ri field_for'来了解Rails中嵌套表单的所有内容。)

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