41

我刚刚更新了 RVM,.rvmrc它自动创建.ruby-gemset.ruby-version.

我一直都有.rvmrc内容像rvm use --create default@project_name. 但是,.ruby-version包含我正在运行的特定 Ruby 版本,而不是default. 我很犹豫要不要检查这个。

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

我什么时候应该或不应该办理登机手续.ruby-gemset和/或.ruby-version

具体来说:

  • 有哪些权衡?
  • 项目类型如何影响决策(例如,应用程序与 gems)?
  • 如果应该签入,项目类型如何影响这些文件中的内容?

来自 rvm、rbenv 等工具的创建者的引用将在回答中受到赞赏。

4

3 回答 3

45

For standard projects

Check in .ruby-version if your project depends on a ruby like ruby-2.0.0. Check in .ruby-gemset only if your team agreed on it. Add .rvmrc to .gitignore so anyone can override .ruby-* files settings with .rvmrc.

For gems

Check in .ruby-version with ruby-1.8.7 only if your project still targets ruby 1.8.7, otherwise check it in only if your gem requires it. Do not check in .ruby-gemset.

于 2013-05-24T15:01:12.017 回答
5

签到.rvmrc.ruby-version还是.ruby-gemset

为了:

  • 您的项目有不同的分支(比如支持 Ruby 和版本的 RubyGems1.8项目)1.92.0最好签入此文件,这样您的开发人员在切换分支时就不必继续编辑这些文件。但是,这不适用于应用程序,您将主要只在一个 Ruby 版本上工作。

  • 与上面的情况相同,但假设您正在运行一个 CI 服务器(例如 TeamCity/Jenkins/...),它只会在rake spec每次签入时自动运行。您不想为每个分支创建单独的构建管道,只是为了rvm use ...每个分支都有一个单独的。您只希望根据分支自动选择 Ruby 版本

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

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

另请参阅RVM 最佳实践

反对:

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

    例如rvm install 1.9.3 --patch railsexpress,falcon --name ruby-1.9.3-perf

    在上面的例子中,我安装了 Ruby 1.9.3 和一些很棒的加速补丁(顺便说一句,它们很棒),但我没有叫它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(因为他们正在处理其他项目)。他们的.rvmrcor.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​​。

于 2013-05-24T12:22:43.873 回答
0

我会包括.ruby-version- 你和其他在该项目上工作的人,以及你的服务器,应该使用相同版本的 Ruby。

.ruby-gemset.... 取决于你,我想。

于 2013-04-18T15:36:39.600 回答