我应该检查`.ruby-gemset`和/或`.ruby-version`?

时间:2013-04-18 15:30:31

标签: ruby rvm

我刚刚更新了RVM,并且代替了旧的.rvmrc,它自动创建了.ruby-gemset.ruby-version

我一直有.rvmrc个文件,内容如rvm use --create default@project_name。但是,.ruby-version包含我正在运行的特定Ruby版本而不是default。我在犹豫是否犹豫不决。

另外,我听到有人在播客上说不应该登记.ruby-gemset,因为其他人可能对如何命名宝石有自己的偏好。

何时应该或不应该在.ruby-gemset和/或.ruby-version办理登机手续?

具体做法是:

  • 有哪些权衡?
  • 项目类型如何影响决策(例如,应用程序与宝石)?
  • 如果要检入它们,项目类型如何影响这些文件中的内容?

来自rvm,rbenv等工具创作者的引用将在答案中得到赞赏。

3 个答案:

答案 0 :(得分:43)

对于标准项目

如果您的项目依赖于像.ruby-version这样的红宝石,请检入ruby-2.0.0。 仅在您的团队同意的情况下办理.ruby-gemset。 将.rvmrc添加到.gitignore,以便任何人都可以使用.ruby-*覆盖.rvmrc个文件设置。

对于宝石

仅当您的项目仍定位于ruby .ruby-version时,才会ruby-1.8.71.8.7签入,否则只有在您的宝石需要时才会检查它。 请勿登记.ruby-gemset

答案 1 :(得分:5)

签入.rvmrc.ruby-version.ruby-gemset

FOR:

  • 您的项目有不同的分支(比如支持Ruby 1.81.92.0版本的RubyGems项目)。最好检查一下这个文件,以便开发人员在切换分支时不必继续编辑这些文件。但是,同样的情况不适用于应用程序,在那里你只会使用一个Ruby版本。

  • 与上述情况相同,但假设您正在运行CI服务器(比如TeamCity / Jenkins / ...),每次签入都会自动运行rake spec。您不希望为每个分支创建单独的构建管道,只是为了为每个分支单独rvm use ...。您只需要根据分支

  • 自动选择Ruby版本
  • 您可以严格控制环境和所有开发人员。您要么不需要或要求他们使用相同的ruby和gemset

  • 您正在使用Phusion Passenger或Capistrano,它会自动读取.rvmrc个文件,并选择正确的红宝石进行部署/托管

另请参阅RVM Best Practices

反对:

  • 您可以使用一些实验性补丁在RVM中编译自己的Ruby,并为其提供自定义名称。

    e.g。 rvm install 1.9.3 --patch railsexpress,falcon --name ruby-1.9.3-perf

    在上面的例子中,我已经安装了Ruby 1.9.3以及一些很好的加速补丁(btw they are awesome),但是我称之为1.9.3,而不是将它称为我自己的名字。每当我需要时,我会说rvm use ruby-1.9.3-perf。在这种情况下,如果项目有自己的.ruby-version,那么它会弄乱我的环境。在我的项目中,这些补丁是标准的,我们积极推荐这些补丁。但是开发人员如何命名结果编译的Ruby取决于他们

  • 同样,人们使用不同的宝石。有些人根本不使用宝石。有些与不同(但相似)的ruby项目共享相同的gemset。鉴于此,单个.ruby-gemset也不适合所有人

  • 您的项目有一个不起眼的ruby版本,只是说1.9.3。您的开发人员首先安装了最新的Ruby 1.9.3-p329。但他们后来只更新了RVM / Rbenv(因为他们正在开展其他项目)。他们的.rvmrc.ruby-version刚好中断,因为在RVM / Rbenv中注册的Ruby的最新版本刚刚从ruby-1.9.3-p329更改为.ruby-1.9.3-p362,它会说ruby-1.9.3-p362未安装。这种情况往往会发生。

只要为Ruby版本指定了正确的全名(包括补丁级别),就应该没问题。假设您的项目.ruby-versionruby-1.9.3-p329。使用所有这些补丁很容易编译自己的Ruby,并且只是自定义它ruby-1.9.3-329,只是为了使配置文件能够获取这个ruby而不是标准的ruby。

答案 2 :(得分:0)

我会包含.ruby-version - 您和其他任何从事该项目的人以及您的服务器都应该使用相同版本的Ruby。

.ruby-gemset ....我认为,取决于你。