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

Nat*_*ong 40 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等工具创建者的引用将在答案中得到认可.

mpa*_*pis 43

对于标准项目

检查.ruby-version您的项目是否依赖于红宝石ruby-2.0.0..ruby-gemset仅在您的团队同意的情况下办理登机手续.添加.rvmrc.gitignore任何人都可以覆盖.ruby-*文件设置.rvmrc.

对于宝石

检查.ruby-versionruby-1.8.7只有当你的项目还针对红宝石1.8.7,否则检查只有当你的宝石需要它.不要办理登机手续.ruby-gemset.

  • 我拒绝编辑你引用自己的答案的冲动.:)感谢您抽出宝贵时间来回答. (3认同)
  • 英语很好,我只是在开玩笑,因为我说"来自rvm等工具的创作者的引用会受到赞赏",所以如果你的答案引用它会很有趣.:) (2认同)

Sub*_*has 5

签到.rvmrc,.ruby-version.ruby-gemset

对于:

  • 你的项目有不同的分支(比如一个RubyGems的工程配套的Ruby 1.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(因为他们正在开展其他项目).他们.rvmrc.ruby-version刚刚突破,因为红宝石的最新版本,RVM/Rbenv登记从刚换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.